🎣OpenMind开源实习总结
2025-1-7
| 2025-1-8
0  |  阅读时长 0 分钟
password
icon
AI summary
type
status
date
slug
summary
tags
category

介绍

本次活动由OpenI启智社区主办,面向高校在校生,旨在推动国产AI计算生态的发展。活动链接:OpenMind 开源实习
活动主要包含两大核心任务:
  • TOP大模型迁移调优:基于昇腾算力跑通和微调指定大模型,需要推理精度和微调性能与GPU对齐,并将模型开源至社区。
简而言之,任务的核心是基于昇腾NPU及其训练框架,完成大模型的微调和预训练,并测试其与GPU的性能差异。
有点小可惜,没能拿到称号
有点小可惜,没能拿到称号
以及若干大模型迁移的小任务。完成每项任务都可以获得相应奖励。
迁移模型任务
迁移模型任务
活动期间我主要完成了以下几个任务:
  • MindSpeed迁移适配任务:
活动期间,启智社区全程提供了强大的算力支持,尤其是昇腾NPU的支持。

国内外NPU生态对比

知乎的一篇回答中,作者详细对比了Nvidia与国内GPU的计算生态:
  • Nvidia CUDA生态:Nvidia在深度学习计算领域一家独大,几乎所有新模型都会优先适配Nvidia显卡。Nvidia也为其硬件提供了丰富的软件支持,如Megatron、TensorRT-LLM等,进一步巩固了其生态优势。
  • 国内NPU生态:国内GPU厂商主要分为两类:
    • 硬件厂商:如寒武纪,通过开发对标Nvidia的软件栈(如CNCL、MLULINK)来支持开源模型,适配常见的深度学习框架和算子。
    • 全家桶厂商:如华为昇腾,提供从硬件到软件的全栈解决方案,虽然对开源模型的适配较为复杂,但在国产化信创项目中具有独特优势。
从实践来看,针对开源大模型的计算卡,各家厂商的差异主要体现在底层算子的适配和优化上。

大模型微调任务

环境

活动提供了昇腾910B NPU(单卡显存64GB)的算力资源。启智社区提供了预配置的conda环境和相关镜像,内置了适配NPU的PyTorch和相关依赖包。云脑任务支持多种算力资源类型,包括单卡、双卡、四卡和八卡NPU资源,使用起来非常便捷。需要注意的是,目前NPU对音频类模型的支持尚不完善,但对NLP类模型的适配已经相当成熟。

模型上传与下载

启智和魔乐社区提供了完善的命令行工具和SDK,方便用户上传和下载模型。具体操作可参考官方文档
以将服务器上的模型上传至社区为例,只需执行以下命令:
其中:
  • REPO_ID 和 MODEL_NAME 为必填参数
  • FILE_PATH 为模型文件路径
  • upload_name 为可选参数

数据处理

主要是一些数据集的转换,常用的微调框架支持的数据集有 Alpaca 格式和 ShareGPT 格式。
以Alpaca格式的指令监督微调任务(通过让模型学习详细的指令以及对应的回答来优化模型在特定指令下的表现)为例,
instruction 列对应的内容为人类指令, input 列对应的内容为人类输入, output 列对应的内容为模型回答。下面是一个例子:
在进行指令监督微调时, instruction 列对应的内容会与 input 列对应的内容拼接后作为最终的人类输入,即人类输入为 instruction\ninput。而 output 列对应的内容为模型回答。

基于LLaMa Factory模型微调

参考zhouhui的教程和LLaMa Factory中文文档,可以快速完成模型的微调
LLaMa Factory微调示例
LLaMa Factory微调示例
只需要参照给定的例子,配置好适合需要微调模型的参数,执行脚本即可实现微调。
微调好后的模型,可以使用openmind库代替transformers库做推理和评估。

模型推理

微调完成后,模型会自动保存到指定的输出目录。可以通过以下代码加载微调后的模型:

模型评估

NPU与GPU对比

NPU与GPU微调loss画到一起
NPU与GPU微调loss画到一起
NPU与GPU相对误差曲线截图
NPU与GPU相对误差曲线截图
微调过程中需要对比NPU与GPU的loss曲线。从实验结果来看,昇腾910B NPU与GPU的loss曲线基本重叠,相对误差控制在2%以内,表现出色。

模型开源

微调好后的模型需上传至启智社区魔乐社区
用户上传到魔乐社区模型介绍页面
用户上传到魔乐社区模型介绍页面
微调后的模型需上传至启智社区魔乐社区。这两个社区拥有丰富的开源模型资源和活跃的开发者生态,为AI技术的开放共享提供了良好平台。

MindSpeed-LLM适配迁移任务

框架介绍、环境搭建

MindSpeed-LLM,原仓名ModelLink,作为昇腾大模型训练框架,旨在为华为 昇腾芯片 提供端到端的大语言模型训练方案, 包含分布式预训练、分布式指令微调、分布式偏好对齐以及对应的开发工具链。环境搭建等有详尽的用户指南

模型转换

将huggingface的权重转换成Megatron-LM格式(mcore或者legacy),在example目录下每个模型都已经预置好权重转换脚本,可以根据需要来进行修改。以Yi-9B为例,转换脚本如下:

预训练、推理、评估

配置脚本前需要完成前置准备工作,包括:环境安装数据集准备及处理Huggingface权重转换,详细的数据集处理可参见用户指南
常用的预训练数据集包括Enwiki、C4和ChineseWebText,指令微调数据集包括Alpaca、ShareGPT和AlpacaHistory。配置脚本时需根据实际情况调整权重保存路径、数据集路径等参数。
以Yi-9B的预训练脚本为例:
 
推理和评估也是类似的操作,在此不再赘述。

结果展示

预训练过程截图
预训练过程截图
推理截图
推理截图
MMLU任务评估
MMLU任务评估
最终,我将相关脚本作为示例提交至Ascend/MindSpeed-LLM仓库,并成功合并了PR。这是我在大型开源项目中的首次贡献,收获颇丰。
顺利合入
顺利合入

总结

通过本次活动,我深入实践了两个任务:基于NPU的大模型微调任务和MindSpeed-LLM适配迁移任务。通过实践证明,NPU在大模型训练方面表现出与GPU相当的性能,且MindSpeed-LLM框架提供了完整的端到端训练方案。这些工作为推进国产化AI计算基础设施的发展提供了有力支持。
最后,衷心感谢启智社区提供的宝贵实习机会和算力资源支持!
 

 
 
 
相关文章 :
  • LLM
  • NPU
  • 加锁文章 本地大模型试玩
    Loading...