-
RK3588部署CNN-LSTM驾驶行为识别模型CNN(卷积神经网络)擅长提取图像的空间特征,LSTM(长短期记忆网络)则擅长处理序列数据的时间特征。首先使用CNN提取视频每一帧特征,之后将提取出的所有特征送入LSTM捕捉视频中的时空特征并对视频特征序列进行分类,实现正常驾驶、闭眼、打哈欠、打电话、左顾右盼5种驾驶行为的识别。一. 模型训练我们在ModelArts创建Notebook完成模型的训练,使用规格是GPU: 1*Pnt1(16GB)|CPU: 8核 64GB,镜像为tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04,首先下载数据集:import os import moxing as mox if not os.path.exists('fatigue_driving'): mox.file.copy_parallel('obs://modelbox-course/fatigue_driving', 'fatigue_driving') if not os.path.exists('rknn_toolkit2-2.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl'): mox.file.copy_parallel('obs://modelbox-course/rknn_toolkit2-2.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl', 'rknn_toolkit2-2.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl') 该数据集包含1525段视频,总共有5个类别:0:正常驾驶、1:闭眼、2:打哈欠、3:打电话、4:左顾右盼我们从原视频中裁剪出主驾驶位画面,并将画面缩放到特征提取网络的输入大小:def crop_driving_square(frame): h, w = frame.shape[:2] start_x = w // 2 end_x = w start_y = 0 end_y = h return frame[start_y:end_y, start_x:end_x] 使用在imagenet上预训练的MobileNetV2网络作为卷积基创建并保存图像特征提取器:def get_feature_extractor(): feature_extractor = keras.applications.mobilenet_v2.MobileNetV2( weights = 'imagenet', include_top = False, pooling = 'avg', input_shape = (IMG_SIZE, IMG_SIZE, 3) ) preprocess_input = keras.applications.mobilenet_v2.preprocess_input inputs = keras.Input((IMG_SIZE, IMG_SIZE, 3)) preprocessed = preprocess_input(inputs) outputs = feature_extractor(preprocessed) model = keras.Model(inputs, outputs, name = 'feature_extractor') return model feature_extractor = get_feature_extractor() feature_extractor.save('feature_extractor') feature_extractor.summary() Model: "feature_extractor" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input_2 (InputLayer) [(None, 256, 256, 3)] 0 _________________________________________________________________ tf_op_layer_truediv (TensorF [(None, 256, 256, 3)] 0 _________________________________________________________________ tf_op_layer_sub (TensorFlowO [(None, 256, 256, 3)] 0 _________________________________________________________________ mobilenetv2_1.00_224 (Model) (None, 1280) 2257984 ================================================================= Total params: 2,257,984 Trainable params: 2,223,872 Non-trainable params: 34,112 设置网络的输入大小为256x256,每隔6帧截取一帧提取视频的图像特征,特征向量的大小为1280,最终得到每个视频的特征序列,序列的最大长度为40,不足用0补齐:def load_video(file_name): cap = cv2.VideoCapture(file_name) frame_interval = 6 frames = [] count = 0 while True: ret, frame = cap.read() if not ret: break if count % frame_interval == 0: frame = crop_driving_square(frame) frame = cv2.resize(frame, (IMG_SIZE, IMG_SIZE)) frame = frame[:, :, [2, 1, 0]] frames.append(frame) count += 1 return np.array(frames) def load_data(videos, labels): video_features = [] for video in tqdm(videos): frames = load_video(video) counts = len(frames) # 如果帧数小于MAX_SEQUENCE_LENGTH if counts < MAX_SEQUENCE_LENGTH: # 补白 diff = MAX_SEQUENCE_LENGTH - counts # 创建全0的numpy数组 padding = np.zeros((diff, IMG_SIZE, IMG_SIZE, 3)) # 数组拼接 frames = np.concatenate((frames, padding)) # 获取前MAX_SEQUENCE_LENGTH帧画面 frames = frames[:MAX_SEQUENCE_LENGTH, :] # 批量提取图像特征 video_feature = feature_extractor.predict(frames) video_features.append(video_feature) return np.array(video_features), np.array(labels) video_features, classes = load_data(videos, labels) video_features.shape, classes.shape((1525, 40, 1280), (1525,)) 总共提取了1525个视频的特征序列,按照8:2的比例划分训练集和测试集(batchsize的大小设为16):batch_size = 16 dataset = tf.data.Dataset.from_tensor_slices((video_features, classes)) dataset = dataset.shuffle(len(videos)) test_count = int(len(videos) * 0.2) train_count = len(videos) - test_count dataset_train = dataset.skip(test_count).cache().repeat() dataset_test = dataset.take(test_count).cache().repeat() train_dataset = dataset_train.shuffle(train_count).batch(batch_size) test_dataset = dataset_test.shuffle(test_count).batch(batch_size) train_dataset, train_count, test_dataset, test_count(<BatchDataset shapes: ((None, 40, 1280), (None,)), types: (tf.float32, tf.int64)>, 1220, <BatchDataset shapes: ((None, 40, 1280), (None,)), types: (tf.float32, tf.int64)>, 305) 之后创建LSTM提取视频特征序列的时间信息送入Dense分类器,模型的定义如下:def video_cls_model(class_vocab): # 类别数量 classes_num = len(class_vocab) # 定义模型 model = keras.Sequential([ layers.Input(shape=(MAX_SEQUENCE_LENGTH, NUM_FEATURES)), layers.LSTM(64, return_sequences=True), layers.Flatten(), layers.Dense(classes_num, activation='softmax') ]) # 编译模型 model.compile(optimizer = keras.optimizers.Adam(1e-5), loss = keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics = ['accuracy'] ) return model # 模型实例化 model = video_cls_model(np.unique(labels)) # 保存检查点 checkpoint = keras.callbacks.ModelCheckpoint(filepath='best.h5', monitor='val_loss', save_weights_only=True, save_best_only=True, verbose=1, mode='min') # 模型结构 model.summary() 网络的输入大小为(N, 40, 1280),使用softmax进行激活,输出5个类别的概率:Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= lstm (LSTM) (None, 40, 64) 344320 _________________________________________________________________ flatten (Flatten) (None, 2560) 0 _________________________________________________________________ dense (Dense) (None, 5) 12805 ================================================================= Total params: 357,125 Trainable params: 357,125 Non-trainable params: 0 _________________________________________________________________实验表明模型训练300个Epoch基本收敛:history = model.fit(train_dataset, epochs = 300, steps_per_epoch = train_count // batch_size, validation_steps = test_count // batch_size, validation_data = test_dataset, callbacks=[checkpoint]) plt.plot(history.epoch, history.history['loss'], 'r', label='loss') plt.plot(history.epoch, history.history['val_loss'], 'g--', label='val_loss') plt.title('LSTM') plt.xlabel('Epoch') plt.ylabel('Loss') plt.legend() plt.plot(history.epoch, history.history['accuracy'], 'r', label='acc') plt.plot(history.epoch, history.history['val_accuracy'], 'g--', label='val_acc') plt.title('LSTM') plt.xlabel('Epoch') plt.ylabel('Accuracy') plt.legend() 加载模型最优权重,模型在测试集上的分类准确率为95.8%,保存为saved_model格式:model.load_weights('best.h5') model.evaluate(dataset.batch(batch_size)) model.save('saved_model') 96/96 [==============================] - 0s 5ms/step - loss: 0.2169 - accuracy: 0.9580 [0.21687692414949802, 0.9580328] 二、模型转换首先将图像特征提取器feature_extractor转为tflite格式,并开启模型量化:import tensorflow as tf converter = tf.lite.TFLiteConverter.from_saved_model('feature_extractor') converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS] converter.post_training_quantize = True # 模型量化 tflite_model = converter.convert() with open('mbv2.tflite', 'wb') as f: f.write(tflite_model) 再将视频序列分类模型转为onnx格式,由于lstm参数量较少,不需要进行量化:python -m tf2onnx.convert --saved-model saved_model --output lstm.onnx --opset 12 最后导出RKNN格式的模型,可根据需要设置target_platform为rk3568/rk3588:from rknn.api import RKNN rknn = RKNN(verbose=False) rknn.config(target_platform="rk3588") rknn.load_tflite(model="mbv2.tflite") rknn.build(do_quantization=False) rknn.export_rknn('mbv2.rknn') rknn.release() rknn = RKNN(verbose=False) rknn.config(target_platform="rk3588") rknn.load_onnx( model="lstm.onnx", inputs=['input_3'], # 输入节点名称 input_size_list=[[1, 40, 1280]] # 固定输入尺寸 ) rknn.build(do_quantization=False) rknn.export_rknn('lstm.rknn') rknn.release() 三、模型部署我们在RK3588上部署MobileNetV2和LSTM模型,以下是板侧的推理代码:import os import cv2 import glob import shutil import imageio import numpy as np from IPython.display import Image from rknnlite.api import RKNNLite MAX_SEQUENCE_LENGTH = 40 IMG_SIZE = 256 NUM_FEATURES = 1280 def crop_driving_square(img): h, w = img.shape[:2] start_x = w // 2 end_x = w start_y = 0 end_y = h result = img[start_y:end_y, start_x:end_x] return result def load_video(file_name): cap = cv2.VideoCapture(file_name) # 每隔多少帧抽取一次 frame_interval = 6 frames = [] count = 0 while True: ret, frame = cap.read() if not ret: break # 每隔frame_interval帧保存一次 if count % frame_interval == 0: # 中心裁剪 frame = crop_driving_square(frame) # 缩放 frame = cv2.resize(frame, (IMG_SIZE, IMG_SIZE)) # BGR -> RGB [0,1,2] -> [2,1,0] frame = frame[:, :, [2, 1, 0]] frames.append(frame) count += 1 cap.release() return np.array(frames).astype(np.uint8) # 获取视频特征序列 def getVideoFeat(frames): frames_count = len(frames) # 如果帧数小于MAX_SEQUENCE_LENGTH if frames_count < MAX_SEQUENCE_LENGTH: # 补白 diff = MAX_SEQUENCE_LENGTH - frames_count # 创建全0的numpy数组 padding = np.zeros((diff, IMG_SIZE, IMG_SIZE, 3)) # 数组拼接 frames = np.concatenate((frames, padding)) # 取前MAX_SEQ_LENGTH帧 frames = frames[:MAX_SEQUENCE_LENGTH,:] frames = frames.astype(np.float32) # 提取视频每一帧特征 feats = [] for frame in frames: frame = np.expand_dims(frame, axis=0) result = rknn_lite_mbv2.inference(inputs=[frame]) feats.append(result[0]) return feats rknn_lite_mbv2 = RKNNLite() rknn_lite_lstm = RKNNLite() rknn_lite_mbv2.load_rknn('model/mbv2.rknn') rknn_lite_lstm.load_rknn('model/lstm.rknn') rknn_lite_mbv2.init_runtime(core_mask=RKNNLite.NPU_CORE_0_1_2) rknn_lite_lstm.init_runtime(core_mask=RKNNLite.NPU_CORE_0_1_2) files = glob.glob("video/*.mp4") for video_path in files: label_to_name = {0:'正常驾驶', 1:'闭眼', 2:'打哈欠', 3:'打电话', 4:'左顾右盼'} frames = load_video(video_path) frames = frames[:MAX_SEQUENCE_LENGTH] imageio.mimsave('test.gif', frames, durations=10, loop=0) display(Image(open('test.gif', 'rb').read())) feats = getVideoFeat(frames) feats = np.concatenate(feats, axis=0) feats = np.expand_dims(feats, axis=0) preds = rknn_lite_lstm.inference(inputs=[feats])[0][0] for i in np.argsort(preds)[::-1][:5]: print('{}: {}%'.format(label_to_name[i], round(preds[i]*100, 2))) rknn_lite_mbv2.release() rknn_lite_lstm.release() 最终的视频识别效果如下:🚀四、本文小结本文详细阐述了基于RK3588平台的CNN-LSTM驾驶行为识别模型全流程,利用MobileNetV2提取图像的空间特征、LSTM处理视频的时序特征完成对正常驾驶、闭眼、打哈欠、打电话和左顾右盼5类驾驶行为的精准识别,在ModelArts上训练达到95.8%分类准确率,并分别将mbv2.tflite和lstm.onnx转换为RKNN格式实现板侧的高效推理部署。
-
我的训练数据大约是16TB的图像数据和光流真值(.pfm文件)。我目前想要尝试使用该数据训练模型,但是在创建训练作业的时候,并没有选项支持从OBS桶中读取这些数据。我查阅了相关使用指南,在 cid:link_0 中提到,在训练代码中通过OBS SDK实现操作OBS中的数据,并且说明了有400GB的磁盘空间可以直接挂载。但是这一空间还是太少了,不满足我当前的需求。而直接访问obs桶的话,数据读取速度又太慢了,npu长时间处于等待状态。有没有方法可以进一步提高obs中的数据访问速度?或者,能否提供更大的 ssd 存储空间,以支持大规模数据训练?
-
【话题交流】2025年已悄然步入尾声~这一年,大家有哪些悄然生长的收获?华为云的ModelArts Studio(MaaS)让我们更好的调用deepseek等大模型;对象存储,让海量数据存得下、管得好、用得快。
-
[训练管理] 模型训练时出现无法运行权限问题stdbuf: failed to run command ‘/home/ma-user/modelarts/user-job-dir/code/train.py’: Permission denied桶的情况如上所示,在OBS Browser中也改过train.py的「对象 ACL」的权限,但是没有作用
-
如题。近日购买了华为deepseekapi调用包,准备接入现有的服务,但是发现有极其严重的内容审核,连总结论文摘要都提示有敏感信息。请问能否关闭?这严重影响了服务内容。
-
1. 目前的操作指南我只能用券购买Notebook或者workflow,是否可以用来购买云空间ECS呢~2.是否可以用券购买算力集群~在申请的时候,目前看无法配置实例
-
打扰请问,为了在modelarts的notebook中引出ComfyUI的服务端口,使用了ngrok如在notebook中把comfyUI服务的8818端口引出来,使用了ngrok ,设置了connect.ngrok-agent.com不走代理no proxy=127.0.0.1, localhost,172.16.*,obs.cn-soutimest-2.myuaweicloud.com, iam.cn-southwest-2.huaweicloud.com,pip.modelarts,private.com,connect.ngrok-agent.com但是./ngrok http 8818之后,还是不能正常连接,unset https_proxy HTTPS_PROXY HTTP_PROXY http_proxy ,unset了这些参数也不能成功,出现以下错误,可否解决该问题?
-
一、系统性技术传播,构建完整知识体系本次活动通过"社团获奖成果展示"和"华为开发者空间核心技术介绍"两大环节,系统性地普及了华为云、ModelArts、昇腾AI算力等技术矩阵。针对不同基础的学生群体,设计了差异化的技术传播路径:为初学者解析"开箱即用"的开发便利性,为技术骨干展示"ICT大赛训练营"的实战价值,形成了多层次、立体化的技术知识传播体系。二、沉浸式实践体验,推动技术能力转化活动创新设置"动手工坊"实践环节,提供"AI图像识别模型运行"与"鸿蒙云应用调试"两大技术实践方向。在技术助教团队的指导下,参与者通过15分钟的高效实践,完成了从理论认知到动手实操的完整流程,亲身体验了华为开发平台的技术优势,实现了技术能力的实质性提升。 三、学习社群持续运营,构建技术交流生态活动后成功建立"华为技术学习"微信社群,通过定期分享《新手任务清单》、技术资料包及实战案例,打造了持续活跃的技术交流平台。社群形成了良性的"学习-实践-分享"循环机制,为学生提供了长期的技术成长支持,确保了技术传播的持续性和深入性。四、人才培养初见成效,完善技术传承体系通过本次活动,成功吸引了多名技术骨干关注并意向加入HCSD计划,初步构建了"以学生影响学生"的技术传承模式。这种模式不仅壮大了校园技术布道师队伍,更形成了良好的技术传播氛围,为后续持续开展技术活动奠定了人才基础。五、学训赛创深度融合,验证技术应用路径活动成功将华为开发者空间嵌入学生"学习-训练-竞赛-创新"的成长体系,通过获奖学生的真实案例展示,生动呈现了如何将平台技术能力转化为个人技术实力和竞赛成果。这种模式为参与者提供了清晰的技术成长路径,验证了"技术学习-实践应用-创新产出"的可行性。 六、生态建设持续推进,夯实未来发展基础本次活动不仅是技术知识的传播,更是华为开发者生态在校园的深度落地。通过技术体验、实践应用和社群建设等多个维度,初步构建了可持续发展的校园开发者生态。未来将继续深化与华为开发者生态的合作,通过系列技术工作坊、项目实战和竞赛培育,持续推动创新技术能力培养工作。
-
✨活动背景与宗旨祝贺各位选手圆满完赛!赛场上的奇思妙想与卓越技术,共同呈现了一场精彩纷呈的技术盛宴。赛事虽已落幕,思考与成长永不止步。每一行代码都蕴含着独特思路,每一次调试都沉淀为宝贵经验。为延续这份技术热情,共建共享共进的开发者社区,我们正式启动赛后征文活动。我们相信,个人的经验是火花,众人的分享可汇成照亮前路的星光。诚邀您留下技术干货、备赛心得与真诚建议,为未来的开发者点亮引路明灯,共同滋养我们的开发者技术生态。✨活动主题我们诚挚地邀请您,围绕但不限于以下方向,分享您的故事:技术干货深挖掘:分享您在比赛中解决某个棘手技术难题的思路、算法优化技巧、架构设计心得或使用的炫酷工具/框架。备赛心路全记录:回顾您的备赛历程,如何平衡学业与备赛?有哪些高效的学习方法和资源推荐?心态上是如何调整的?赛事体验与建言:谈谈您对本次赛事组织、赛题设置、平台体验的感受,并提出您宝贵的改进建议,帮助我们做得更好。致未来选手的话:作为一名“过来人”,您最想对下一届的学弟学妹们说些什么?有哪些“避坑”指南或“必胜”秘诀?✨参与对象揭榜挂帅华为赛道获奖团队✨活动时间征文期:即日起至2025年12月7日评审与公示期:征文结束后10个工作日内。✨参与方式在 [挑战杯揭榜挂帅华为赛道-大赛官方论坛-热门活动分享] 以发帖形式参与。帖子标题格式:【赛后分享】+ 自定义标题 (例如:【赛后分享】我是如何用XX算法实现性能突破的】)。论坛链接:cid:link_0🎁奖励机制(重磅激励!)奖项数量奖品“技术之光”头奖8名机械背光键盘“经验之谈”优秀奖10名华为云键盘“积极参与”奖 (若干)若干所有按要求完成投稿的选手,都将获得官方定制的赛事礼品一份(如数据收纳包/折叠双肩包/公牛插座等,仓库随机发送其一) ✨评选标准内容质量 (50%):技术深度、逻辑清晰度、实用性;分享价值 (30%):对后来者的指导与启发意义;互动热度 (20%):帖子在社区内的回复与讨论情况。✨作品要求作品必须为原创首发,不得抄袭;内容需积极向上,与技术、赛事或开发者生态相关;字数建议不少于800字,图文并茂更佳(也可参考链接以下附件征文模版参考)。 🚀🚀你们不仅是比赛的参与者,更是这个技术社区的建设者。您的每一次分享,都可能成为他人前行路上的关键一步。让我们携手,将短暂的比赛,延伸为长久的影响力。期待在论坛中,读到您独一无二的精彩故事!
-
案例介绍本项目是基于华为开发者空间云上开发环境部署的<AI试卷生成与在线测试平台>技术实践案例。该应用深度集成华为云MaaS(ModelArts as a Service)平台提供的DeepSeek-V3大语言模型,充分利用平台提供的百万级商用token处理能力,构建了一个能够一键生成任意学科、任意难度的试卷,提供模拟考试环境、自动评分以及智能解析功能的智能试卷生成与在线测试平台。案例内容一、概述1. 案例介绍华为开发者空间,是为全球开发者打造的专属开发者空间,致力于为每位开发者提供一台云主机、一套开发工具和云上存储空间,汇聚昇腾、鸿蒙、鲲鹏、GaussDB、欧拉等华为各项根技术的开发工具资源,并提供配套案例指导开发者从开发编码到应用调测,基于华为根技术生态高效便捷的知识学习、技术体验、应用创新。本项目是华为开发者空间开发平台 - 云开发环境(容器)部署的<AI试卷生成与在线测试平台>技术实践案例。该应用深度集成华为云MaaS(ModelArts as a Service)平台提供的DeepSeek-V3大语言模型,充分利用平台提供的百万级商用token处理能力,构建了一个能够一键生成任意学科、任意难度的试卷,提供模拟考试环境、自动评分以及智能解析功能的智能试卷生成与在线测试平台。<AI试卷生成与在线测试平台>技术架构上,项目采用react+typescript技术栈,基于华为MaaS平台的强大算力支持,实现了智能解析功能的智能试卷生成与在线测试平台。华为MaaS平台不仅提供高质量的DeepSeek-V3模型,更具备百万token的超长上下文处理能力,使得本应用能够生成准确的试题。前端采用React框架构建响应式界面,后端通过封装MaaS平台API,为用户提供刷题、模拟考试、自动评分、智能解析等功能。2. 功能特性AI 智能出题: 输入任意主题(如“Python基础”、“中国近代史”、“驾考科目一”),即刻生成包含单选、多选、判断题的完整试卷。模拟考试: 沉浸式答题界面,配备倒计时功能。自动评分: 考试结束后立即出分,通过可视化图表展示得分详情。错题回顾: 提供复习模式,高亮显示错题,并附带 AI 生成的详细解析。题集功能: 建立错题难题题集,不断复习巩固知识。题集试卷: 根据题集生成试卷,检验你的学习成果。历史记录: 自动保存考试记录与成绩,随时回溯过往练习。云端同步: 支持配置 Huawei Cloud OBS 将考试记录同步至云端。3. 适用对象企业个人开发者高校学生4. 案例时间本案例总时长预计60分钟。5. 案例流程说明:登录华为开发者空间,VS Code安装Huawei Developer Space插件,远程连接操作云开发环境;远程创建、开机、连接云开发环境(虚拟机);领取百万token代金券福利,开通商用模型服务,获取模型API 地址、API Key等参数;GitCode拉取代码 https://gitcode.com/zhepama/ai-exam-platform.git,安装依赖,修改参数;启动程序,在浏览器端测试验证<AI试卷生成与在线测试平台>。5. 资源总览本案例预计花费0元。资源名称规格单价(元)时长(分钟)华为开发者空间开发平台 - 云开发环境(容器)鲲鹏通用计算增强型 kc1 | 2vCPUs | 4G | HCE免费60二、基础环境与资源准备1. VS Code远程连接云开发环境(容器)参考案例《华为开发者空间 - 云开发环境(容器)IDE插件远程连接操作指导》中的“二、云开发环境IDE插件远程连接操作指导”的内容,完成“1. 安装插件” ~ “4. 连接”章节步骤。完成连接之后的状态:2. 领取百万免费token福利参考案例《Versatile Agent中自定义接入大模型配置华为云Maas指导》中的“一、 领取”章节内容,领取华为开发者空间百万token代金券福利,购买ModelArts Studio DeepSeek-V3 轻量体验包(¥3.50)。开通商用模型服务,最后获取API地址、API Key的参数值。三、来刷题吧 - AI试卷生成与在线测试平台1.来刷题吧 - AI试卷生成与在线测试平台功能介绍AI试卷生成与在线测试平台是一个基于DeepSeek大模型的智能聊天应用,提供美观的Web界面和流畅的对话体验。项目采用React + Typescript,结合华为云MaaS平台百万免费商用token,配置DeepSeek-V3大模型。🛠️ 技术栈核心框架: React 19构建工具: ViteUI 样式: Tailwind CSS图标库: Lucide React环境管理: dotenv📂 目录结构server/index.js - 后端服务主入口与路由逻辑src/App.tsx - 前端应用主入口与路由逻辑src/services/geminiService.ts - AI 接口调用与试卷生成逻辑src/services/storageService.ts - 本地存储与云同步逻辑src/components/ - UI 组件库types.ts - TypeScript 类型定义2. 获取来刷题吧 - AI试卷生成与在线测试平台代码新建项目文件在/workspace/node目录下创建ai-exam-platform文件夹。cd /workspace/node mkdir ai-exam-platform cd ai-exam-platform下载代码点击Source Control图标,然后点Initialize Repository。点CHANGES右侧的 ··· 图标,在下拉菜单中选择Clone。输入代码仓地址,Clone from URL: https://gitcode.com/zhepama/ai-exam-platform.git选择代码仓目录:/workspace/ai-exam-platform/,点Select as Repository Destination。然后点Open,将此目录设置为本地代码仓。加载结束后的状态如下:3. 安装项目依赖安装项目依赖npm install2. 修改配置文件,配置API Key在项目根目录下创建一个 .env 文件,参考 .env.example 进行配置:cp .env.example .env打开配置文件.env,修改配置参数。将配置文件中的your_API_Key替换为“二、基础环境与资源准备”章中的“4. 领取百万免费福利”节最后获取到的API Key。配置项说明:变量名必填描述示例API_KEY✅AI 模型的 API 密钥 (Gemini 或 OpenAI)AIzaSy...AI_PROVIDER❌指定 AI 提供商 (gemini 或 openai)openaiAI_MODEL❌指定模型版本deepseek-v3.1AI_BASE_URL❌OpenAI 接口地址 (用于代理)https://api.modelarts-maas.com/v2OBS_SERVER❌连接OBS的服务地址``OBS_ACCESS_KEY_ID❌OBS访问密钥中的AK。``OBS_SECRET_ACCESS_KEY❌OBS访问密钥中的SK。``OBS_BUCKET❌OBS的bucker``JUDGE_COUNT❌判断题数量。5SINGLE_CHOICE_COUNT❌单选题数量。5MULTI_CHOICE_COUNT❌多选题数量5# API配置 # AI Provider Configuration # Options: 'gemini' | 'openai' # Default: 'gemini' AI_PROVIDER=openai # API Key for the selected provider # For Gemini: Get from Google AI Studio # For OpenAI: Get from OpenAI Platform API_KEY=your_API_Key # 替换为你的实际API密钥 # AI Model to use # Default for Gemini: 'gemini-2.5-flash' # Default for OpenAI: 'gpt-3.5-turbo' # You can override this with other models like 'gpt-4', 'gemini-1.5-pro', etc. AI_MODEL=deepseek-v3.1 # AI Base URL # Only used if AI_PROVIDER is 'openai' (or compatible services like DeepSeek, Moonshot, etc.) # Default: 'https://api.openai.com/v1' AI_BASE_URL=https://api.modelarts-maas.com/v2 5. 测试体验来刷题吧 - AI试卷生成与在线测试平台在VS Code终端窗口中运行如下命令,启动来刷题吧 - AI试卷生成与在线测试平台。npm run dev:server在VS Code弹出的对话框中点Open in Browser,或者直接在浏览器中打开:http://localhost:3000/输入测试问题:“驾考科目一”,来刷题吧 - AI试卷生成与在线测试平台正确回答。开始答题提交试卷查看错题每一题都会有答案解析数据同步题集功能 (新增)查看题集题集中会随机出题,供你测试点击题目卡片,卡片反转可以查看答案题集试卷根据题目生成试卷生成新的试卷进行测试吧至此,基于华为开发者空间-云开发环境(容器)+MaaS实现来刷题吧 - AI试卷生成与在线测试平台案例结束,各位开发者快来华为开发者空间体验吧。我正在参加【案例共创】【第8期】基于华为开发者空间云开发环境(容器),集成华为云AI服务(Agent或MaaS API),完成AI应用构建开发最佳实践cid:link_6
-
请问在编译算子的过程中,我使用环境中自带的/usr/local/Ascend-toolkit/latest作为Ascend路径进行处理,发现出现了root权限不足的问题,无法进行后续的算子包部署及调用,请问我需要进行什么修改呢?
-
ssh远程链接notebook的时候,并没有华东二对应的cn-east-4节点可以选;自行添加配置文件的时候按照教程的步骤也没有在git库中找到对应的文件
-
【获奖名单】序号项目编号学校团队名称作品名称奖项1480719上海交通大学全都对队基于昇腾NPU的训推一体加速优化方案擂主(特等奖第一名)2514025暨南大学想去研究大模型智模昇算——基于全自主技术栈软硬协同的大模型系统调优方案特等奖3474858杭州电子科技大学CEATRG推理大模型的训练调优与性能加速特等奖4512717哈尔滨工业大学纳算力克大工坊面向昇腾平台的大语言模型推理调优与性能加速实践一等奖5515501北京邮电大学BUPT-ParCIS推理大模型的训练调优与性能加速的协同优化一等奖6473176华中科技大学二进制萝卜培育中心大模型参数高效微调与推理引擎加速一等奖7518313淮阴工学院智在必得基于Ascend的端到端推理优化大模型方案一等奖8480007哈尔滨医科大学璃月医科大学孤云阁校区基于PPO+华为昇腾的推理模型加速系统二等奖9475128华南师范大学试试推理大模型的训练调优与性能加速创新方案二等奖10474329华东师范大学ECNU_ELRM基于国产化推理大模型高效训推技术二等奖11512943西安交通大学西北智联推理大模型的训练调优与性能加速助力全栈自主 AI二等奖12511717湖北工业大学TEMP基于全栈自主AI的大模型训练调优与应用二等奖13471760华中科技大学拳头花可火基于GRPO强化学习,知识蒸馏和多算子融合的推理大模型综合调优与加速技术二等奖14519134复旦大学CodeWisdomAdaMind三等奖15479466中国计量大学智枢拓界量衡昇算:赋能极致推理的大模型加速引擎三等奖16513186天津理工大学重生之我在昇腾摸鱼基于AscendC加速大模型推理三等奖17472861中国科学技术大学点子王面向自主大模型推理增强的训练调优与性能加速方案三等奖18526004桂林电子科技大学Create推理大模型的训练调优与性能加速助力全栈自主 AI三等奖19517087西北工业大学NPU-IIL-AscendMindAscendMind:基于昇腾AI平台的轻量化推理优化模型三等奖20473984台州科技职业学院永宁永胜基于知识蒸馏的大模型训练调优和性能加速三等奖21470775北京邮电大学bupt735基于Qwen的电子电路实验虚拟助教三等奖22508583桂林电子科技大学ken推理大模型的训练调优与性能加速助力全栈自主AI优胜奖23508208同济大学三角矩阵基于华为全栈AI技术生态的推理大模型性能优化研究优胜奖24529681桂林电子科技大学好想要MatebookFold队基于华为AI技术的推理大模型的训练调优与性能加速优胜奖25521477武汉船舶职业技术学院破晓者推理大模型的训练调优与性能加速助力全栈自主AI优胜奖26506591南昌大学马桶蹲累了基于昇腾CANN的轻量级大模型推理增强与性能加速研究优胜奖27503585福州外语外贸学院昇腾芯链昇腾芯链:轻量级推理模型的蒸馏优化与端侧加速优胜奖28473846广东机电职业技术学院昇腾智推大模型昇腾智推大模型优胜奖29471801广东石油化工学院[object Object]推理大模型的训练调优与性能加速助力全 栈自主 AI 方案优胜奖30524083华东理工大学华东理工大学AIMC实验室面向全栈自主AI的大规模预训练模型训练调优与推理加速方法研究优胜奖31518595桂林电子科技大学这对吗推理大模型的训练调优与性能加速助力全栈自主AI优胜奖32526548桂林理工大学RookieRush基于昇腾 AI 的轻量级推理大模型训练调优与性能加速方案优胜奖33518067华东师范大学lab308推理大模型的训练调优与性能加速助力全栈自主AI优胜奖34524572中国矿业大学徐海学院远帆“推理大模型的训练调优与性能加速助力全栈自主 AI”优胜奖备注:2025年10月20日至2025年11月20日为拟授奖作品公示期。
-
案例介绍本项目是基于华为开发者空间云上开发环境部署的 RuoYi-Vue + TinyAgent + MCP + MaaS 技术实践案例。该应用在 RuoYi-Vue 中深度集成华为云MaaS(ModelArts as a Service)平台提供的DeepSeek大语言模型,并使用 TinyAgent 对接 MCP 服务,充分利用平台提供的百万级商用 Token 处理能力以及 Agent 技术,探索传统前端项目的智能化改造。案例内容一、概述1. 案例介绍本项目通过结合 RuoYi-Vue 的前端框架、华为云 MaaS 提供的大语言模型服务、TinyAgent 的智能代理能力以及 MCP 服务,实现了一个高效的智能化系统。该系统可以快速部署在开发环境中,提供高性能的智能对话服务,并通过智能代理进行业务自动化处理。应用中,RuoYi-Vue 作为前端框架提供了灵活的界面设计和快速开发的能力,配合 DeepSeek 模型的强大语言处理能力,使得本应用能够支持自然语言理解、对话管理和语义分析等多种功能。TinyAgent 通过接入 MCP 服务,进一步增强了系统的智能化水平,使得应用在面对复杂场景时,能够更好地处理多轮对话和长文本分析任务。该项目不仅为企业和个人开发者提供了一个智能化改造的范例,也为高校学生提供了实践机会,让他们能够深入了解前端开发、智能对话系统、Agent 技术以及云平台应用的结合。2. 适用对象企业个人开发者高校学生## 3. 案例时间本案例总时长预计60分钟。## 4. 案例流程说明:注册登录华为开发者空间,进入云开发环境(容器)平台,web端实现容器的创建与开机操作;PC本地通过VS Code安装Huawei Developer Space插件,远程连接操作云开发环境(容器)的;领取百万token代金券福利,登录MaaS平台,开通商用模型服务,获取模型调用参数API Key;GitCode拉取 RouYi-Vue + TinyAgent 改造代码,安装依赖,修改配置参数API Key,运行 MCP Server 端;启动程序,在浏览器端测试验证,通过 AIChat 操作页面功能。5. 资源总览本案例预计花费0元。资源名称规格单价(元)时长(分钟)华为开发者空间开发平台 - 云开发环境(容器)鲲鹏通用计算增强型 kc1 | 2vCPUs | 4G | HCE免费60二、基础环境与资源准备1. VS Code远程连接云开发环境容器参考案例《华为开发者空间 - 云开发环境(容器)IDE插件远程连接操作指导》中的“二、云开发环境IDE插件远程连接操作指导”的内容,完成“1. 安装插件” ~ “4. 连接”章节步骤。我这里选择的 All in One 环境,也就是包括了 NodeJS、Java、Python、Go 的环境。完成连接之后的状态:2. 领取百万免费token福利参考案例《Versatile Agent中自定义接入大模型配置华为云Maas指导》中的“一、 领取”章节内容,领取华为开发者空间百万token代金券福利,本案例中选用DeepSeek-R1,则在此处点DeepSeek-R1 轻量体验包(¥7.00)。若其他案例中选用DeepSeek-V3 则购买ModelArts Studio DeepSeek-V3 轻量体验包(¥3.50)。开通商用模型服务,最后获取API地址、API Key的参数值。3.从 GitCode 拉取源码源码基于 RouYi-Vue 改造,新增了 MCP-Server 并集成了 MCP-Client,实现了 AIChat 可调用 MCP 来操控页面,是 AI 时代前端智能化的一次探索尝试。在 VSCode 新建终端:输入命令拉取代码:git clone https://gitcode.com/huqi-dev/RuoYi-Vue3 三、前端智能化改造1. OpenTiny 助力 MCP-Server 开发@OpenTiny/tiny-agent 基于MCP协议使AI理解与操作用户界面,完成用户任务。它的特性包括但不限于:支持MCP协议 支持MCP客户端 + FunctionCall/ReAct模式的大模型任务调度指令 支持模拟人机交互,让AI操作用户界面,可人为干预可扩展操作哭 丰富的人机交互模拟,支持组件模块API专有扩展开发工具套件 轻松标记编排,生成AI能理解的网站使用说明书首先我们需要配置一下环境,主要是把 MaaS 提供的 DeepSeek R1 接入进来,为我们的前端智能化改造提供核动力。复制 mcp-server/.env-example 内容到 mcp-server/.env 中,填写自己的api key、api url 等。如:url=https://api.modelarts-maas.com/v1/chat/completions apiKey= 此处请替换为您的 api key model=DeepSeek-R1 systemPrompt=You are a helpful assistant with access to tools. 接着在命令行中执行命令,安装依赖并启动项目:cd RuoYi-Vue3/mcp-server/ npm install npm run dev这时候会监听到 3001 端口已经有服务在运行了。我们通过浏览器访问 http://localhost:3001/mcp 能够看到服务正常运行:2. OpenTiny 助力 MCP-Client 开发@OpenTiny/tiny-agent 同样也适用于 MCP-Client 的开发,我们在源码目录的 /workspace/RuoYi-Vue3/src/components/AIChat 下实现了 AIChat 组件和它能调用的 MCP tools。继续新建终端,执行命令安装依赖并运行前端:cd RuoYi-Vue3/ npm install npm run dev此时浏览器会自动打开 rouyi 的前端页面:登录完成之后,我们去到 系统管理-日志管理-操作日志 ,可以看到右下角多了一 AIChat 的入口:我们点击 AIChat 的图标可以打开一个对话框:接着点击 列出目前系统中可用的工具 ,AIChat 会调用 MCP-Server 获取我们定义在客户端的 MCP tools:接着我们再测试一下清空筛选条件功能:刷新页面在搜索条件中随意输入,接着点击 界面操作:见证奇迹的时候到了:原先有值的筛选条件被一一清空了,我们从对话中也能看到 MCP tools 被调用了:3. 代码浅析mcp-server 的代码是参考 tiny-agent/demo-server : cid:link_7tree/main/demo-server 实现:demo-server/.env.example — 示例环境变量,说明必须的配置项package.json — 依赖与运行/构建脚本tsconfig.json — TypeScript 编译配置(生产)tsconfig.dev.json — 开发用的 TypeScript 配置覆盖src/index.ts — 应用入口,配置加载与模块初始化proxy-server.ts — HTTP / WebSocket 代理与路由层(主服务)chat.ts — 聊天 / 会话逻辑(业务处理、上游适配)connector.ts — 上游连接适配器(HTTP/WebSocket 客户端封装)tiny-agent/demo‑server 是一个演示(demo)服务器模块,用于快速搭建后端服务,以便前端或其它客户端能够通过 Web 接口调用 tiny‑agent 的能力。通过它,我们可以看到一个完整的“Agent 服务端”如何接收请求、调用 Agent 模型、返回结果。整体流程为:客户端发送请求,服务端执行 Agent 推理,可能调用工具,然后将结果返回给客户端。前端AIChat 的实现代码主要都在 src/components/AIChat ,包含了 UI 层和 mcp tools 相关的实现,核心代码为:import { EndpointTransport, WebSocketClientEndpoint } from '@opentiny/tiny-agent-mcp-connector'; import { McpValidator } from '@opentiny/tiny-agent-mcp-service'; import { setupMcpService } from '@opentiny/tiny-agent-mcp-service-vue'; import { McpToolParser } from '@opentiny/tiny-agent-task-mcp'; import { useTaskScheduler } from './scheduler'; import mcpToolJson from './mcp-tool.json'; import mcpToolRegistry from '@/utils/mcpToolRegistry'; export function initMcp() { // Connector const wsEndpoint = new WebSocketClientEndpoint({ url: import.meta.env.VITE_CONNECTOR_ENDPOINT_URL }); const endpointTransport = new EndpointTransport(wsEndpoint); // MCP Service const mcpService = setupMcpService(); mcpService.mcpServer.connect(endpointTransport); // MCP Validatorß const mcpValidator = new McpValidator(); mcpService.setValidator(mcpValidator); // Task Scheduler const { taskScheduler, actionManager } = useTaskScheduler(); const doTask = async (task, opt) => taskScheduler.pushTask(task, opt); // MCP Tool Parser & mcp-tool.json const mcpToolParser = new McpToolParser(doTask); mcpToolParser.extractAllTools(mcpToolJson).forEach((tool) => { mcpService.mcpServer.registerTool(tool.name, tool.config, tool.cb); }); // 设置全局MCP工具注册管理器 mcpToolRegistry.setMcpService(mcpService); console.log('[MCP] MCP服务初始化完成,工具注册管理器已设置'); return { wsEndpoint, endpointTransport, mcpService, mcpValidator, taskScheduler, actionManager, mcpToolParser, }; } 实例化:import { initMcp } from './mcp'; const { endpointTransport, mcpValidator } = initMcp(); 完整代码请参考: https://gitcode.com/huqi-dev/RuoYi-Vue3至此,我们完成了基于华为开发者空间云开发环境(容器)探索前端智能化,后续待 OpenTiny 开源 WebAgent 实现,我们再分享基于 OpenTiny Next 的企业智能前端解决方案,我们相信以生成式 UI 和 WebMCP 两大自主核心技术为基础的OpenTiny Next ,势必能加速企业应用的智能化改造。我正在参加【案例共创】第8期 【案例共创】基于华为开发者空间云开发环境(容器)开发构建AI应用 https://bbs.huaweicloud.com/forum/thread-0282197603883890106-1-1.html
-
一、 活动概述本次活动以“技术赋能,实践育人”为核心宗旨,成功举办华为开发者空间校园体验日。活动旨在将华为的前沿技术资源与开发工具引入校园,通过“认知-体验-应用”的闭环流程,打破理论学习与实践应用之间的壁垒,切实推动华为技术知识在高校学生中的传播与落地。二、 技术传播路径:从认知到理解系统性知识普及: 活动通过“社团获奖成果展示”和“华为开发者空间八大免费权益介绍”两个环节,系统性地向参与者普及了华为云、ModelArts、昇腾AI算力等核心技术矩阵的价值,明确了其作为“技术成长加速器”的定位。价值主张精准传达: 针对不同层次的学生,传递了清晰的技术价值主张。对初学者,强调其“开箱即用”的便捷性,降低了技术门槛;对技术爱好者与竞赛者,则突出其作为“ICT大赛官方训练营”的战略价值,激发了将平台资源转化为竞赛优势的动力。三、 实践落地闭环:从理解到应用沉浸式动手体验: 本次活动核心环节设置为“动手工坊”,提供了“AI图像识别模型运行”与“鸿蒙云手机应用调试”两大实践选项。在技术助教的指导下,参与者利用刚领取的免费资源,在10-15分钟内亲身完成了从代码运行到效果呈现的全过程,创造了深刻的“啊哈时刻”,实现了从“注册用户”到“活跃开发者”的关键转化。“学-训-赛-创”模式验证: 活动成功地将华为开发者空间嵌入到学生固有的“学习-训练-竞赛-创新”成长体系中。结合自身在华为ICT大赛中的获奖经历,生动展示了如何将平台能力转化为个人与团队的项目成果与竞赛荣誉,为参与者描绘了一条清晰的技术成长路径。四、 关键成果与深远影响技术认知广度与深度同步提升本次活动吸引了超过 80名 对编程与AI技术感兴趣的同学现场参与,通过系统化的内容设计与沉浸式实践,有效拓宽了参与者对华为开发者技术体系的理解,加深了对云服务、AI模型开发及鸿蒙应用等前沿技术的认知层次。构建可持续的技术交流与学习社群活动后成功沉淀并建立起一个 180人 的“华为技术学习”微信社群。通过持续分享《新手任务清单》、技术资料包与每周实战技巧,社群已成为学生之间开展技术探讨、经验分享与资源互动的常态化平台,形成了良性的学习循环与技术传播生态。生态建设初见成效: 本次活动不仅是技术推广,更是华为开发者生态的播种。通过活动的号召与展示,成功吸引了多名技术骨干关注并意向加入HCSD计划,为壮大校园技术布道师队伍、形成“以学生影响学生”的良性循环奠定了坚实基础。五、 总结与展望本次华为开发者空间体验日活动,是一次成功的“技术布道+实践落地”校园范本。我们不仅传递了知识,更提供了工具与场景,让学生能够即时将知识转化为实践能力。未来,我们将继续依托计算机协会与HCSD平台,深化与华为开发者生态的合作,通过组织系列技术工作坊、项目实战和竞赛集训,持续推动华为技术在校园的深度应用与创新,培养更多具备实战能力的数字化创新人才。
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签