SwanLab是一款开源、轻量级的AI实验跟踪工具,提供了一个跟踪、比较、和协作实验的平台,旨在加速AI研发团队100倍的研发效率。其提供了友好的API和漂亮的界面,结合了超参数跟踪、指标记录、在线协作、实验链接分享、实时消息通知等功能,让您可以快速跟踪ML实验、可视化过程、分享给同伴。借助SwanLab,科研人员可以沉淀自己的每一次训练经验,与合作者无缝地交流和协作,机器学习工程师可以更快地开发可用于生产的模型。
本教程将介绍如何使用SwanLab来可视化跟踪魔乐社区上的模型微调,帮助大家了解SwanLab的能力。感兴趣的朋友也可以亲自上手感受一下。
友情链接:
- 魔乐社区:<https://modelers.cn/docs/zh/openmind-library/0.9.1/overview.html>
- SwanLab项目官网:<https://swanlab.cn>
- SwanLab离线版GitHub开源仓库:<https://github.com/SwanHubX/SwanLab>
如果了解了上述的对应机制,那么就可以跑一个简单的微调代码了,该代码参考了魔乐社区的教程文档,稍作调整,可以对比NVIDIA显卡的结果。
2.1 概述
魔乐社区(Modelers.cn)是一个为人工智能开发者及爱好者打造的社区,提供工具链、数据集、模型和应用等AI领域生产要素的托管及展示服务和支撑系统。目前,魔乐社区已支持openMind Library。该工具通过简单的API接口,帮助开发者完成模型预训练、微调、推理等流程。同时,openMind Library原生兼容PyTorch 和 MindSpore 等主流框架,原生支持昇腾NPU处理器。openMind Library可以和PEFT、DeepSpeed等三方库配合使用,来提升模型微调效率。
2.2 环境配置
2.2.1 直接安装环境
如果是昇腾AI卡系列的话,配置环境前需要先安装驱动等设备,具体可以参考软件安装-CANN商用版8.0.RC3开发文档-昇腾社区。
驱动安装&验证
首先得确定有NPU卡和NPU相关驱动,驱动是8.0.RC3.beta1,如果没安装可以参考上面软件安装的链接查看。
安装好后的验证方法是运行下面的命令,该命令作用与nvidia-smi类似,这里是查看NPU的状态和性能
可以看到如下信息的话就表示驱动已经安装完成了,左侧是安装成功后运行代码后的结果,右侧是每一部分的含义
安装好驱动之后就可以配置环境了,本次微调代码使用PyTorch框架,昇腾AI应用使能套件中自带了基于PyTorch框架的各类函数,因此正常安装就行。
安装命令如下:
注意以下几点:
- 可以使用镜像源来安装环境,不然会很浪费时间,可以使用清华源:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple name
- 魔乐社区的模型支持PyTorch和MindSpore两种不同框架。配置环境时,可根据需要选择其中一个框架进行配置。
2.2.2 docker环境安装(推荐)
魔乐社区官方库也提供了模型的docker环境。
推荐通过点击模型测试部分(下图红框)找到docker的链接,通过docker来拉起拉起环境。下面介绍docker环境的搭建教程。
首先得确定有NPU卡和NPU相关驱动,驱动是8.0.RC3.beta1,如果没安装可以参考CANN官方安装教程
完成安装后检测方法是运行
可以看到如下信息的话就表示驱动已经安装完成了。
接下来使用如下命令创建一个装好openmind环境的容器,这样可以省去大量安装环境的时间:
这将在后台开启一个名为openmind容器。使用如下命令可进入到容器当中
出现如下界面即表示进入到容器当中
最后在docker中运行如下命令安装SwanLab即可完成环境安装。
2.3 数据集处理
方法目前支持下载的数据集格式如下:
- parquet
- json或者jsonl
- tar.gz
- csv
- 下载python脚本加载魔乐社区数据集
- 下载python脚本加载三方站点数据集
2.4 加载模型
和transformers使用差不多,分别加载模型和分词器
2.5 训练参数配置
创建一个TrainingArguments类,其中包含可以调整的所有超参数以及不同的训练选项。
2.6 评估参数设置
Trainer在训练过程中不会自动评估模型性能,需要向Trainer传递一个函数来计算和展示指标。
2.7 可视化工具配置
swanlab支持记录openMind Library。能够在线/离线查看训练日志。SwanLab支持openMind Library通过callback调用,调用代码可参考后文。
关于SwanLab的使用方法可以参考SwanLab官方文档-快速开始
如果提示登录swanlab,可以在官网完成注册后,使用获取API KEY找到对应的登陆密钥并粘贴,这样将能够使用云上看版随时查看训练过程与结果。
2.8 全过程代码
这里使用HF Transformers实现同样的训练过程,使用NVIDIA-A100卡来跑了一次做个对比,A100对应的代码如下:
下面是Ascend NPU与A100实验对比:
首先是实验时间,此次实验epoch=3,
看样子昇腾卡比A100稍微快点
然后是显存消耗,其中两个监测NPU/GPU状态的代码如下:
显存消耗差不多
最后是loss等参数的变化
感觉A100上运行的结果震荡比较明显,昇腾卡震荡比较少。