前置条件
执行本文操作之前, 请完成以下准备工作。
注册天翼云账号,确保主账号完成实名认证。
平台支持3种购买模式:
默认集群,按量付费模式,天翼云账户余额需要大于100元。
默认集群专属配额,BCP下单包周期扩展型资源,就会在默认队列中获取一个专属队列用于使用资源配额。
专属集群独占资源,BCP下单包周期独立型资源,建议至少8台机器组成一个智算集群。
平台体验:https://huiju.ctyun.cn/?regionId=200000001852
环境:英伟达H800环境
分场景实践介绍
场景一:编码开发调试
适用场景:只想跑通样例代码,进行编码实验和Debug,单机少卡即可。
步骤1.启动开发机
启动开发机,启动后点击打开即可使用Notebook和VSCode开发界面。
步骤2.文件目录
开发机默认自带mount和cache2个目录。
数据和模型挂载mount目录:/work/mount/目录是用于使用和挂载平台上的数据集和模型文件的,创建界面选择对应数据集和模型后,系统自动分配挂载路径,打开开发机即可看到这些路径,写代码直接读取这些路径即可读取数据和模型。
存储时间:只在开发机运行中可使用,开发机关闭后mount目录会和容器取消挂载,也无法读取。
目录隔离:在不同开发机的目录内容是隔离的,每启动一个开发机都是自己的一套mount和cache。
编码调试cache目录:每个用户的每一个开发机都默认赠送50GiB的/work/cache目录。
存储时间:Cache目录是临时目录,开发机关闭后cache的内容会在5天后清空。
目录隔离:在不同开发机的目录内容是隔离的,每启动一个开发机都是自己的一套mount和cache。
对大客户开通/work/home目录,仅针对大客户提工单开通。
存储时间:Home目录在子账号下永久生效
目录隔离:不同开发机的数据是互通的,一份Home目录所有开发机都是相同内容、同步操作。
对大客户开通/work/share目录,仅针对大客户工单开通。
存储时间:Home目录在子账号下永久生效
目录隔离:share目录对租户下是租户下所有用户都可以共同看到的,多人同时操作。不同开发机的数据是互通的,一份Home目录所有开发机都是相同内容、同步操作。
步骤3.终端控制、代码运行、Debug调试
点击启动即可启动ide。
点击打开会跳转到vscode的页面。
可以跳转到相关文件夹或终端,功能和vscode一样。
打开终端。
点击菜单栏右侧执行按钮,选择“Run” or “Debug”。
也可以通过终端执行数据操作,比如:移动数据到对应目录等。
步骤4.查看性能
查看GPU信息命令:nvidia-smi 。
查看NPU信息命令:npu-smi info 。
测试网络上下行带宽命令:bash <(wget -qO- https://down.vpsaff.net/linux/speedtest/superbench.sh) --speed 。
注意
Huggingface、Github由于翻墙下载无论在哪里下载都比较慢,本平台不提供违规的翻墙服务,建议下载模型使用阿里modelscope。
步骤5.制作镜像
如果调试好代码,代码在单节点环境可以运行,我们可以将镜像保存为我们的自定义镜像。方便我们做后续的多节点训练。
在开发机任务列表点击更多--制作镜像。
输入镜像名称以及版本制作镜像。
在我的镜像里面会看到该镜像。
场景二:训练准备
步骤1.下载模型文件
在本次示例中,我们使用qwen1.8b模型。
下载模型:模型文件和数据集可以通过魔乐社区、魔搭社区等国内社区下载。
魔搭社区下载:
pip install modelscope
modelscope download --model Qwen/Qwen-1_8B-Chat --log-dir ./
步骤2.拉取代码
我们clone代码的时候,如果代码是github,那么随时可能会被禁用,我们可以在本地进行拉取后,直接采用拖拽或者upload的命令上传到IDE上,模型权重、数据集均支持该操作,该操作方便简单,便于进行快速的任务搭建。
git clone https://github.com/QwenLM/Qwen.git
代码版本控制:平台使用的IDE是网页版本的vscode,但基本功能和正常的vscode一样,支持多种插件,同时包含版本控制工具,可以进行团队代码协作。一些辅助的代码大模型的插件我们也可以同步使用。
步骤3.镜像使用
#使用平台基础镜像 ubuntu22.04-cuda12.1.0-py310-torch2.3.0-dpo:v1.4
如果不满足可以在IDE安装相关包,并在IDE位置制作自定义镜像(注意平台制作自定义镜像的逻辑为docker commit,确保环境安装到位)。
步骤4.数据处理
数据集:将下面数据集保存为chat.json,示例数据集为100条。
[{"id": "identity_0", "conversations": [{"from": "user", "value": "猜谜语:一身卷卷细毛,吃的青青野草,过了数九寒冬,无私献出白毛。 (打一动物)"}, {"from": "assistant", "value": "谜底:白羊"}]}, {"id": "identity_1", "conversations": [{"from": "user", "value": "猜谜语:纸袋是它房,枕头搁身上;泡进开水里,身软味道香。 (打一食物)"}, {"from": "assistant", "value": "谜底:快餐面"}]}, {"id": "identity_2", "conversations": [{"from": "user", "value": "猜谜语:云想衣裳花想容 (打一词语)"}, {"from": "assistant", "value": "谜底:各有所思"}]}, {"id": "identity_3", "conversations": [{"from": "user", "value": "猜谜语:学生上门,站满墙根。 (打一成语)"}, {"from": "assistant", "value": "谜底:家徒四壁"}]}, {"id": "identity_4", "conversations": [{"from": "user", "value": "猜谜语:囊括全部金牌 (打一内蒙古地名)"}, {"from": "assistant", "value": "谜底:包头"}]}, {"id": "identity_5", "conversations": [{"from": "user", "value": "猜谜语:穿下不穿上,站在院一旁。 (打一字)"}, {"from": "assistant", "value": "谜底:邪"}]}, {"id": "identity_6", "conversations": [{"from": "user", "value": "猜谜语:头小四腿长,脖子高过房,身穿花皮袄,不声又不响。 (打一动物)"}, {"from": "assistant", "value": "谜底:长颈鹿"}]}, {"id": "identity_7", "conversations": [{"from": "user", "value": "猜谜语:一年到头绿叶挂,五月枝头开白花,无风自有香气来,浓浓烈烈令人夸。 (打一植物)"}, {"from": "assistant", "value": "谜底:栀子花"}]}, {"id": "identity_8", "conversations": [{"from": "user", "value": "猜谜语:千层宝库翻开来,漆黑纵横一片排,历代事情它记载,知识没它传不开。 (打一物)"}, {"from": "assistant", "value": "谜底:书籍"}]}, {"id": "identity_9", "conversations": [{"from": "user", "value": "猜谜语:一个哥哥凸肚皮,生对耳朵让人提,不怕水来不怕火,就怕肚里没东西。 (打一生活物)"}, {"from": "assistant", "value": "谜底:铁锅"}]}, {"id": "identity_10", "conversations": [{"from": "user", "value": "猜谜语:啤酒出口 (打一字)"}, {"from": "assistant", "value": "谜底:卑"}]}, {"id": "identity_11", "conversations": [{"from": "user", "value": "猜谜语:宝玉去她也去 (打一字)"}, {"from": "assistant", "value": "谜底:安"}]}, {"id": "identity_12", "conversations": [{"from": "user", "value": "猜谜语:看云彩 (打一成语)"}, {"from": "assistant", "value": "谜底:察言观色"}]}, {"id": "identity_13", "conversations": [{"from": "user", "value": "猜谜语:沧海变桑田 (打一字)"}, {"from": "assistant", "value": "谜底:汗"}]}, {"id": "identity_14", "conversations": [{"from": "user", "value": "猜谜语:大路货和高档品 (打一劳资用语)"}, {"from": "assistant", "value": "谜底:普加一级"}]}, {"id": "identity_15", "conversations": [{"from": "user", "value": "猜谜语:二人求见,盼有空隙。 (打一时间用语)"}, {"from": "assistant", "value": "谜底:两会期间"}]}, {"id": "identity_16", "conversations": [{"from": "user", "value": "猜谜语:二九青春・卷帘格 (打一纪年用语)"}, {"from": "assistant", "value": "谜底:八十年代"}]}, {"id": "identity_17", "conversations": [{"from": "user", "value": "猜谜语:中秋・遥对格 (中药名)"}, {"from": "assistant", "value": "谜底:半夏"}]}, {"id": "identity_18", "conversations": [{"from": "user", "value": "猜谜语:东施笑颦・秋千格 (商品名)"}, {"from": "assistant", "value": "谜底:西装"}]}, {"id": "identity_19", "conversations": [{"from": "user", "value": "猜谜语:一时起风波 (打一俗语四字)"}, {"from": "assistant", "value": "谜底:浪子回头"}]}, {"id": "identity_20", "conversations": [{"from": "user", "value": "猜谜语:一身兼二职 (打一俗语五字)"}, {"from": "assistant", "value": "谜底:对事不对人"}]}, {"id": "identity_21", "conversations": [{"from": "user", "value": "猜谜语:衣着大众化 (打一俗语四字)"}, {"from": "assistant", "value": "谜底:服从多数"}]}, {"id": "identity_22", "conversations": [{"from": "user", "value": "猜谜语:新婚之夜,新娘不让新郎上床。 (打一山东地名)"}, {"from": "assistant", "value": "谜底:济南"}]}, {"id": "identity_23", "conversations": [{"from": "user", "value": "猜谜语:古代有,今天没有,支出有,收入没有。 (打一字)"}, {"from": "assistant", "value": "谜底:十"}]}, {"id": "identity_24", "conversations": [{"from": "user", "value": "猜谜语:躺下才舒服 (打一成语)"}, {"from": "assistant", "value": "谜底:坐立不安"}]}, {"id": "identity_25", "conversations": [{"from": "user", "value": "猜谜语:长身体节节光,白胖胖没衣裳,水当被泥当床,一年到头不吃粮。 (打一植物)"}, {"from": "assistant", "value": "谜底:莲藕"}]}, {"id": "identity_26", "conversations": [{"from": "user", "value": "猜谜语:山林里面一老翁,头上白毛蓬松松,飞来飞去不怕累,爱吃果实和小虫。 (打一动物)"}, {"from": "assistant", "value": "谜底:白头鹎"}]}, {"id": "identity_27", "conversations": [{"from": "user", "value": "猜谜语:海里一棵花,根子往上扎,一天浇三遍,就是不见它。 (打一人体器官)"}, {"from": "assistant", "value": "谜底:心脏"}]}, {"id": "identity_28", "conversations": [{"from": "user", "value": "猜谜语:四四方方一堆似雪花,落入水中不见它,一日三餐离不了,单独入口叫哇哇。 (打一食物)"}, {"from": "assistant", "value": "谜底:盐"}]}, {"id": "identity_29", "conversations": [{"from": "user", "value": "猜谜语:日复一日有奔头 (打一字)"}, {"from": "assistant", "value": "谜底:奋"}]}, {"id": "identity_30", "conversations": [{"from": "user", "value": "猜谜语:收罗马人为徒 (打一成语)"}, {"from": "assistant", "value": "谜底:得意门生"}]}, {"id": "identity_31", "conversations": [{"from": "user", "value": "猜谜语:沾沾自喜 (打一节气)"}, {"from": "assistant", "value": "谜底:小满"}]}, {"id": "identity_32", "conversations": [{"from": "user", "value": "猜谜语:雾散之后冰消融 (打一节气)"}, {"from": "assistant", "value": "谜底:雨水"}]}, {"id": "identity_33", "conversations": [{"from": "user", "value": "猜谜语:数以百万逃走了 (打一字)"}, {"from": "assistant", "value": "谜底:兆"}]}, {"id": "identity_34", "conversations": [{"from": "user", "value": "猜谜语:三长两短,不偏不倚。 (打一字)"}, {"from": "assistant", "value": "谜底:正"}]}, {"id": "identity_35", "conversations": [{"from": "user", "value": "猜谜语:一个人做得,二个人做不得,人人都说做过,人人都说没有见过。 (打一生理现象)"}, {"from": "assistant", "value": "谜底:做梦"}]}, {"id": "identity_36", "conversations": [{"from": "user", "value": "猜谜语:一位姑娘本姓王,弯弯绕绕想情郎,读书情郎想不到,只想一个种田郎。 (打一动物)"}, {"from": "assistant", "value": "谜底:蚂蟥"}]}, {"id": "identity_37", "conversations": [{"from": "user", "value": "猜谜语:青竹竿,顶红绒,大火烧到紫禁城,七八个大哥来救火,各个烧的指头痛。 (打一植物)"}, {"from": "assistant", "value": "谜底:红花"}]}, {"id": "identity_38", "conversations": [{"from": "user", "value": "猜谜语:在娘家成双作对,到夫家两路分开,虽然日日相见,不能登在一堆。 (打一物)"}, {"from": "assistant", "value": "谜底:耳坠"}]}, {"id": "identity_39", "conversations": [{"from": "user", "value": "猜谜语:自幼生长在深山,黑红颜色分后先,由黑变红人人爱,由红变黑不值钱。 (打一生活物)"}, {"from": "assistant", "value": "谜底:木炭"}]}, {"id": "identity_40", "conversations": [{"from": "user", "value": "猜谜语:唐宋八家,杨州八怪。 (打一字)"}, {"from": "assistant", "value": "谜底:做"}]}, {"id": "identity_41", "conversations": [{"from": "user", "value": "猜谜语:何剩一丁 (打一成语)"}, {"from": "assistant", "value": "谜底:杀人灭口"}]}, {"id": "identity_42", "conversations": [{"from": "user", "value": "猜谜语:一一用力 (打一字)"}, {"from": "assistant", "value": "谜底:五"}]}, {"id": "identity_43", "conversations": [{"from": "user", "value": "猜谜语:昏昏沉沉,生在早晨,说它是烟,你没留神。 (打一自然物)"}, {"from": "assistant", "value": "谜底:雾"}]}, {"id": "identity_44", "conversations": [{"from": "user", "value": "猜谜语:身穿战甲赵子龙,头戴金盔诸葛亮,铁面黑须包文拯,无故杀死杨六郎。 (打一动物)"}, {"from": "assistant", "value": "谜底:老虎"}]}, {"id": "identity_45", "conversations": [{"from": "user", "value": "猜谜语:十八天发杈,十八天开花,十八天结籽,十八天归家。 (打一植物)"}, {"from": "assistant", "value": "谜底:荞麦"}]}, {"id": "identity_46", "conversations": [{"from": "user", "value": "猜谜语:叮当响,叮当响,又圆又扁又四方。 (打一物)"}, {"from": "assistant", "value": "谜底:铜元"}]}, {"id": "identity_47", "conversations": [{"from": "user", "value": "猜谜语:头戴红纱帽,身穿黑外套,登台作手势,走路唱小调。 (打一动物)"}, {"from": "assistant", "value": "谜底:苍蝇"}]}, {"id": "identity_48", "conversations": [{"from": "user", "value": "猜谜语:挖土引水能养鱼 (打一字)"}, {"from": "assistant", "value": "谜底:地"}]}, {"id": "identity_49", "conversations": [{"from": "user", "value": "猜谜语:闭上眼睛才敢吻 (打一成语)"}, {"from": "assistant", "value": "谜底:举目无亲"}]}, {"id": "identity_50", "conversations": [{"from": "user", "value": "猜谜语:曹冲称大象,吴王索鱼肠。 (打一成语)"}, {"from": "assistant", "value": "谜底:刻舟求剑"}]}, {"id": "identity_51", "conversations": [{"from": "user", "value": "猜谜语:夜半枝头,残红四五点。 (打一《红楼梦》人名)"}, {"from": "assistant", "value": "谜底:李纨"}]}, {"id": "identity_52", "conversations": [{"from": "user", "value": "猜谜语:草下游来一只鸭 (打一字)"}, {"from": "assistant", "value": "谜底:艺"}]}, {"id": "identity_53", "conversations": [{"from": "user", "value": "猜谜语:非禽非兽小眼窝,自小掌握超声波,旋转追逐样样会,捕捉蚊虫更利索。 (打一动物)"}, {"from": "assistant", "value": "谜底:蝙蝠"}]}, {"id": "identity_54", "conversations": [{"from": "user", "value": "猜谜语:花儿大,花儿香,人们称它花中王。 (打一植物)"}, {"from": "assistant", "value": "谜底:牡丹"}]}, {"id": "identity_55", "conversations": [{"from": "user", "value": "猜谜语:千里迢迢在眼前,雷声隆隆不下雨,雪花纷纷不觉寒。 (打一字)"}, {"from": "assistant", "value": "谜底:磨"}]}, {"id": "identity_56", "conversations": [{"from": "user", "value": "猜谜语:风华正茂,被刀砍倒,阎罗王作证,陈屋王担保。 (打一食物)"}, {"from": "assistant", "value": "谜底:咸菜"}]}, {"id": "identity_57", "conversations": [{"from": "user", "value": "猜谜语:平平亮亮一堵墙,墙里墙外可相望。 (打一建筑物)"}, {"from": "assistant", "value": "谜底:玻璃"}]}, {"id": "identity_58", "conversations": [{"from": "user", "value": "猜谜语:斧头把手已脱落 (打一字)"}, {"from": "assistant", "value": "谜底:爸"}]}, {"id": "identity_59", "conversations": [{"from": "user", "value": "猜谜语:胸无点黑 (打一成语)"}, {"from": "assistant", "value": "谜底:襟怀坦白"}]}, {"id": "identity_60", "conversations": [{"from": "user", "value": "猜谜语:调查见曲直 (打一《三国演义》人名)"}, {"from": "assistant", "value": "谜底:曹植"}]}, {"id": "identity_61", "conversations": [{"from": "user", "value": "猜谜语:城西残云半遮月 (打一字)"}, {"from": "assistant", "value": "谜底:屋"}]}, {"id": "identity_62", "conversations": [{"from": "user", "value": "猜谜语:拆掉床木架,一人好住下。 (打一字)"}, {"from": "assistant", "value": "谜底:庆"}]}, {"id": "identity_63", "conversations": [{"from": "user", "value": "猜谜语:肚子大,脑瓜小,胸前有对大镰刀,别看样子长得笨,捕捉呱呱叫。 (打一动物)"}, {"from": "assistant", "value": "谜底:螳螂"}]}, {"id": "identity_64", "conversations": [{"from": "user", "value": "猜谜语:叶儿青青杆儿高,爱在路上生阴凉,开着紫花一串串,长的果儿有翅膀。 (打一植物)"}, {"from": "assistant", "value": "谜底:槐树"}]}, {"id": "identity_65", "conversations": [{"from": "user", "value": "猜谜语:小小一只缸,装满一肚浆,打开看一看,黄白不一样。 (打一食物)"}, {"from": "assistant", "value": "谜底:蛋"}]}, {"id": "identity_66", "conversations": [{"from": "user", "value": "猜谜语:无事横起,有事立起,上磨肩头,下磨脚底。 (打一文具)"}, {"from": "assistant", "value": "谜底:墨"}]}, {"id": "identity_67", "conversations": [{"from": "user", "value": "猜谜语:雾中一人衣衫少 (打一字)"}, {"from": "assistant", "value": "谜底:修"}]}, {"id": "identity_68", "conversations": [{"from": "user", "value": "猜谜语:不识庐山真面目 (打一成语)"}, {"from": "assistant", "value": "谜底:身临其境"}]}, {"id": "identity_69", "conversations": [{"from": "user", "value": "猜谜语:曹操兵败走华容 (打一成语)"}, {"from": "assistant", "value": "谜底:性命交关"}]}, {"id": "identity_70", "conversations": [{"from": "user", "value": "猜谜语:去日苦多 (打一字)"}, {"from": "assistant", "value": "谜底:章"}]}, {"id": "identity_71", "conversations": [{"from": "user", "value": "猜谜语:丈夫的外祖母 (打一成语)"}, {"from": "assistant", "value": "谜底:婆婆妈妈"}]}, {"id": "identity_72", "conversations": [{"from": "user", "value": "猜谜语:出生同一天,住在山两边,说话听得见,相互见面难。 (打一人体器官)"}, {"from": "assistant", "value": "谜底:耳朵"}]}, {"id": "identity_73", "conversations": [{"from": "user", "value": "猜谜语:异乡奇遇 (打一字)"}, {"from": "assistant", "value": "谜底:绮"}]}, {"id": "identity_74", "conversations": [{"from": "user", "value": "猜谜语:离婚 (打一物理名词)"}, {"from": "assistant", "value": "谜底:绝缘"}]}, {"id": "identity_75", "conversations": [{"from": "user", "value": "猜谜语:动物作标本 (打一成语)"}, {"from": "assistant", "value": "谜底:装模作样"}]}, {"id": "identity_76", "conversations": [{"from": "user", "value": "猜谜语:站而不立,庆而不大,街边一间房,买卖东西忙。 (打一字)"}, {"from": "assistant", "value": "谜底:店"}]}, {"id": "identity_77", "conversations": [{"from": "user", "value": "猜谜语:有毛不是鸟,生来奇又巧,无翅空中飞,无脚地上跳。 (打一体育用品)"}, {"from": "assistant", "value": "谜底:羽毛球"}]}, {"id": "identity_78", "conversations": [{"from": "user", "value": "猜谜语:能在水中游,能在地上跑,不吃鱼和虾,喜爱吃青草。 (打一动物)"}, {"from": "assistant", "value": "谜底:鹅"}]}, {"id": "identity_79", "conversations": [{"from": "user", "value": "猜谜语:个子细又高,叶子像大刀,头顶烽火把,好似烈火烧。 (打一植物)"}, {"from": "assistant", "value": "谜底:高粱"}]}, {"id": "identity_80", "conversations": [{"from": "user", "value": "猜谜语:长长一只篓,上下三个口,有我才出门,没我无法走。 (打一生活物)"}, {"from": "assistant", "value": "谜底:裤子"}]}, {"id": "identity_81", "conversations": [{"from": "user", "value": "猜谜语:我站右边 (打一字)"}, {"from": "assistant", "value": "谜底:战"}]}, {"id": "identity_82", "conversations": [{"from": "user", "value": "猜谜语:立字当头为之一新 (打一字)"}, {"from": "assistant", "value": "谜底:析"}]}, {"id": "identity_83", "conversations": [{"from": "user", "value": "猜谜语:一面之词 (打一称谓)"}, {"from": "assistant", "value": "谜底:首席发言人"}]}, {"id": "identity_84", "conversations": [{"from": "user", "value": "猜谜语:一夜征人尽望乡 (打二称谓)"}, {"from": "assistant", "value": "谜底:旅客,思想家"}]}, {"id": "identity_85", "conversations": [{"from": "user", "value": "猜谜语:一岁天无三日晴 (打一称谓)"}, {"from": "assistant", "value": "谜底:阳光少年"}]}, {"id": "identity_86", "conversations": [{"from": "user", "value": "猜谜语:书香门第・卷帘格 (打一称谓)"}, {"from": "assistant", "value": "谜底:人文专家"}]}, {"id": "identity_87", "conversations": [{"from": "user", "value": "猜谜语:两个宁波人・放踵格 (打一常用词)"}, {"from": "assistant", "value": "谜底:怂恿"}]}, {"id": "identity_88", "conversations": [{"from": "user", "value": "猜谜语:掘黄连 (打一常用词)"}, {"from": "assistant", "value": "谜底:挖苦"}]}, {"id": "identity_89", "conversations": [{"from": "user", "value": "猜谜语:街头垃圾箱 (打一常用词)"}, {"from": "assistant", "value": "谜底:放弃"}]}, {"id": "identity_90", "conversations": [{"from": "user", "value": "猜谜语:人为财死 (打一常用词)"}, {"from": "assistant", "value": "谜底:利害"}]}, {"id": "identity_91", "conversations": [{"from": "user", "value": "猜谜语:土壁土门墙,子子孙孙做小偷,出门碰到白胡子老头,呜乎呀呜乎。 (打一动物)"}, {"from": "assistant", "value": "谜底:老鼠"}]}, {"id": "identity_92", "conversations": [{"from": "user", "value": "猜谜语:有根不带沙,有叶不开花,有风随风去,无风停在家。 (打一植物)"}, {"from": "assistant", "value": "谜底:浮萍"}]}, {"id": "identity_93", "conversations": [{"from": "user", "value": "猜谜语:格子里,格子外,格子里长的花蜡菜,又好吃,又好卖,一不臭来二不坏。 (打一食物)"}, {"from": "assistant", "value": "谜底:蜂蜜"}]}, {"id": "identity_94", "conversations": [{"from": "user", "value": "猜谜语:一个老人,要颠要倒,吃块豆腐干就好。 (打一物)"}, {"from": "assistant", "value": "谜底:锄头"}]}, {"id": "identity_95", "conversations": [{"from": "user", "value": "猜谜语:有部分接受 (打一字)"}, {"from": "assistant", "value": "谜底:爱"}]}, {"id": "identity_96", "conversations": [{"from": "user", "value": "猜谜语:元宵 (打一成语)"}, {"from": "assistant", "value": "谜底:朝夕相处"}]}, {"id": "identity_97", "conversations": [{"from": "user", "value": "猜谜语:温酒斩华雄 (打一《水浒传》人名)"}, {"from": "assistant", "value": "谜底:关胜"}]}, {"id": "identity_98", "conversations": [{"from": "user", "value": "猜谜语:短了一点又一点 (打一字)"}, {"from": "assistant", "value": "谜底:知"}]}, {"id": "identity_99", "conversations": [{"from": "user", "value": "猜谜语:我在山下,月在半天挂,打柴不见木,王里是一家。 (打一成语)"}, {"from": "assistant", "value": "谜底:岂有此理"}]}, {"id": "identity_100", "conversations": [{"from": "user", "value": "猜谜语:弄璋之喜 (打一字)"}, {"from": "assistant", "value": "谜底:甥"}]}]
场景三:模型训练
单节点训练
IDE和训练模式都可以使用该脚本启动训练,在IDE中直接可以在terminal中启动训练。
创建train_single_node.sh如下:
#!/bin/bash
export CUDA_DEVICE_MAX_CONNECTIONS=1
export GPUS_PER_NODE=8
export LOG_DIR=train_single
DISTRIBUTED_ARGS="
--nnodes=1 \
--nproc_per_node=${GPUS_PER_NODE} \
--node_rank=0 \
--master_port=6001 \
--master_addr=localhost \
"
torchrun $DISTRIBUTED_ARGS finetune.py \
--model_name_or_path Qwen-1_8B-Chat \
--data_path chat.json \
--fp16 True \
--output_dir output_qwen_single \
--num_train_epochs 1 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 1000 \
--save_total_limit 10 \
--learning_rate 3e-4 \
--weight_decay 0.1 \
--adam_beta2 0.95 \
--warmup_ratio 0.01 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--report_to "none" \
--model_max_length 128 \
--lazy_preprocess True \
--use_lora \
--gradient_checkpointing \
--deepspeed finetune/ds_config_zero3train_single_node.sh
gs/${LOG_DIR}.log
IDE终端训练
如下图所示执行命令:
训练过程:
输出的结果和log日志在相关的目录下:
启动单节点训练任务
单节点训练脚本和IDE上的基本一致。但是我们在示例训练的时候务必删除output_qwen_single 中的内容,否则训练中会出现冲突,也可以自己重新设置子路径。
进入新建训练任务页面后,用户可以选择自定义镜像,也可以使用平台预置的镜像。下面对自定义镜像与平台预置镜像的使用分别做说明。
在此处启动训练任务:
系统预置镜像
预置镜像与平台的训练框架相绑定,因此需要先选择镜像,选择镜像后会自动关联选中对应的训练模式。
自定义镜像
这个在上文中有提到,我们在IDE做好代码调试后会保存自定义镜像。
可以根据需要选择单卡或者多卡算力规格。
填写启动命令:
cd /work/home/cs/Qwen/ #注意该路径是需要代码或者数据集放在hpfs的路径下,或者集群机器都可以访问到的路径。
bash train_single_node.sh
点击提交,开始单节点训练任务。
任务状态:启动中,表示任务待启动。
任务状态:运行中,表示任务正在运行。
成功完成训练的状态为“运行完成”。如果训练出现异常,状态一栏中会显示异常的状态。
点击日志,可查看代码运行状态和出现的异常问题。
同时我们使用tee | 命令将log日志导出到目录中,可在IDE中设置的输出log路径下查看。
我们可以在操作栏使用多种功能提高效率,日志功能可以为我们提供代码运行的日志等信息,点击进去我们可以看到包含如下功能:
日志:可以查看代码运行状态。
在训练日志中还可以点击自动刷新,日志就会自动更新,还可以针对性的查看不同节点的日志,如果日志未出现,可以在右侧日期的位置,选择查看0.5小时内的日志。
基本信息:可以查看任务运行的一些信息,包含运行命令、镜像等。
事件:该功能主要是训练节点的创建过程,便于运维排查问题。
监控:该功能可以对训练过程中的资源使用情况有一个详细的掌握,包含GPU的使用、CPU的使用、带宽等。
保存至模型管理:对于训练完成的任务,我们包含保存模型的功能,可以将模型保存至我的模型,方便后续模型的版本迭代和继续训练。
tensorboard功能:该功能只要我们在训练的时候将tensorboard的路径指定为我们平台固定的存放路径,就可以查看训练的tensorboard的训练log日志,当然我们也可以选择其他更好用的日志平台工具,例如:wandb、swanlab等。
分布式训练-非容错版本
可以满足轻型的训练任务,小规模数据集、小规模模型等。
构建脚本文件
创建train_multi_nodes.sh如下:
#!/bin/bash
export CUDA_DEVICE_MAX_CONNECTIONS=1
export GPUS_PER_NODE=8
DISTRIBUTED_ARGS="
--nnodfinetune.pyODES} \
--nproc_per_node=${GPUS_PER_NODE} \
--node_rank=${RANK} \
--master_port=${MASTER_PORT} \
--master_addr=${MASTER_ADDR} \
"
export LOG_DIR=${RANK}_train_multi_nodes_no_rdzv
torchrun $DISTRIBUTED_ARGS finetune.py \
--model_name_or_path Qwen-1_8B-Chat \
--data_path chat.json \
--fp16 True \
--output_dir output_qwen_multi_no_rdzv \
--num_train_epochs 1 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 1000 \
--save_total_limit 10 \
--learning_rate 3e-4 \
--weight_decay 0.1 \
--adam_beta2 0.95 \
--warmup_ratio 0.01 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--report_to "none" \
--model_max_length 128 \
--lazy_preprocess True \
--use_lora \
--gradient_checkpointing \
--deepspeed finetune/ds_config_zero3.json \
| tee logs/${LOG_DIR}.log
在非容错训练中,我们如果要使用两个节点,由于包含主从节点,那么我们只要设置一个master节点和一个worker节点即可。当机器故障导致的断点问题,我们需要手动由ckpt断点处重新拉起训练。训练成功日志如下。同时我们也可以在IDE的相关目录下查看到日志。两个节点两个日志文件。
分布式训练-RDZV容错训练版本
PyTorch中的Rendezvous(rdzv)训练模式是实现弹性分布式训练的核心机制,主要用于动态管理训练节点的加入与退出,从而实现容错和弹性扩缩容。可以根据ckpt的断点重新拉起训练。该机制主要解决的是在训练工作中集群硬件出现问题,可以快速修复或者更换机器重新拉起训练,如果有ckpt那么就可以在模型训练的断点处拉起训练。
构建脚本文件
创建train_multi_nodes_rdzv.sh如下:
#!/bin/bash
export CUDA_DEVICE_MAX_CONNECTIONS=1
export GPUS_PER_NODE=8
#平台分布式训练参数
DISTRIBUTED_ARGS="
--nproc_per_node=$GPUS_PER_NODfinetune.py
nodes=${PET_NNODES} \
--rdzv_backend=${PET_RDZV_BACKEND} \
--rdzv_endpoint=${PET_RDZV_ENDPOINT} \
--rdzv_id=${PET_RDZV_ID} \
--max_restarts=2 \
--rdzv_conf=timeout=7200,read_timeout=7200
"
export SYSTEMNAME=$POD_NAME #获取pod名称 平台侧自动生成
export LOG_DIR=${SYSTEMNAME}_train_multi_nodes_rdzv
torchrun $DISTRIBUTED_ARGS finetune.py \
--model_name_or_path Qwen-1_8B-Chat \
--data_path chat.json \
--fp16 True \
--output_dir output_qwen_rdzv \
--num_train_epochs 1 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 1000 \
--save_total_limit 10 \
--learning_rate 3e-4 \
--weight_decay 0.1 \
--adam_beta2 0.95 \
--warmup_ratio 0.01 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--report_to "none" \
--model_max_length 128 \
--lazy_preprocess True \
--use_lora \
--gradient_checkpointing \
--deepspeed finetune/ds_config_zero3.json \
| tee logs/${LOG_DIR}.log
同时在容错训练任务中,不存在master节点和worker这种主从节点关系,所有的节点都是worker节点,因此我们需只需要按使用数量填写worker节点,例如使用两个节点那么设置如下:
启动样例:
在该命令行处可以执行多种操作命令,包含但不限于pip等安装命令,如果我们有相似镜像,但是不想再继续制作镜像可以在此处添加pip命令完成环境的完善等。
可以看到训练已经开始。
在IDE相关的目录下也可以看到log日志。
场景四:数据导入和迁移
少量本地数据导入,数据仅自己编码测试使用
简介:如果少量数据在电脑本地,可以直接从本地导入开发机的文件目录即可完成数据导入到开发机,编码读取路径即可。
方式1:Notebook或VScode打开后,左侧目录点击右键-upload,即可导入。
方式2:直接选取本地电脑的文件拖拽到开发机中,即可导入。
少量本地数据导入,数据多人使用、管理
简介:如果数据需要多个开发机使用、或者需要多人使用并且有权限控制,那么建议使用【数据集—基础数据集】
步骤1.数据导入天翼云对象存储
天翼云对象存储https://www.ctyun.cn/products/zos
开通并访问控制台,创建桶:
在桶内可以自行上传文件夹或文件均可
步骤2.获取ZOS文件(夹)的访问路径和AK/SK
获取ZOS文件/文件夹的地址:点击Bucket名称进入Bucket详情中,复制“Bucket外网访问”的URL,然后在URL后面拼接“/xxx文件(夹)”即可获得文件/文件夹地址。
例如下方的文件(夹)地址就是https://bucket-.hangzhou7.zos.ctyun.cn/0-数据集样例 。
获取对象存储ZOS的AK、SK。
步骤3.数据导入息壤一站式智算服务平台
进入息壤一站式智算服务平台,进入菜单【我的数据集-基础数据集】,点击创建普通存储/智算存储的数据集按钮,进入创建页面。
在创建页面中,将步骤2中ZOS的【文件(夹)地址、AK、SK】分别填入【导入方式的ZOS存储地址、数据源AK、数据源SK】,点击提交即可开始导入数据。并且可以设置同租户下哪些子用户可以同样看到和使用此数据集。
步骤4.使用基础数据集
数据集导入后,可以在基础数据集中查看导入进度。如果要大规模训练之前,可【加速到智算存储】通过HPFS并行文件系统进行数据存储和高吞吐的训练保障。
在启动开发机和训练任务的时候,均可选择到【基础数据集】,自动将数据集挂载到容器的挂载路径中,读取挂载路径即可使用基础数据集。
少量本地数据导入,数据需要做微调前标注
简介:如果您想使用saas化的数据标注页面,平台支持导入GB级别的数据集进行数据标注,这里的数据集都是格式化的,用于大模型微调。
步骤1.导入标注数据集
支持导入的数据集格式有:多轮对话、指令微调三元组、Q&A问答对、语句回复排序、图文匹配、图像理解、视觉问答、图像分类。按照引导提示的格式即可上传,如果格式不符合将无法上传。
步骤2.清洗、增强、标注、发布
上传完成后可以对格式化的数据进行清洗、增强、标注。
步骤3.使用标注数据集精调
前置条件:数据集发布后才可进行精调。
进入模型精调,创建精调任务。
在精调任务创建时,先选择模型,选好模型后,会出现模型支持的精调数据集类型,根据类型选择您已发布的数据集即可进行精调。
大量外部存储或服务器数据导入
数据量大的时候需要先把数据导入天翼云ZOS对象存储、再在同资源池内的天翼云对象存储导入息壤一站式智算服务平台。
步骤1.把大量数据从外部导入天翼云对象存储
从外部对象存储迁移到天翼云对象存储:https://www.ctyun.cn/document/10026735/10130494
从服务器迁移到天翼云对象存储:https://www.ctyun.cn/document/10026735/10211451
如果看了说明仍然不会操作的话,请给天翼云对象存储提工单,可以获得专业技术支持。
步骤2.获取ZOS文件(夹)的访问路径和AK/SK
获取ZOS文件/文件夹的地址:点击Bucket名称进入Bucket详情中,复制“Bucket外网访问”的URL,然后在URL后面拼接“/xxx文件(夹)”即可获得文件/文件夹地址。
例如下方的文件(夹)地址就是https://bucket-.hangzhou7.zos.ctyun.cn/0-数据集样例
获取对象存储ZOS的AK、SK。
步骤3.数据导入息壤一站式智算服务平台
进入息壤一站式智算服务平台,进入菜单【我的数据集-基础数据集】,点击创建普通存储/智算存储的数据集按钮,进入创建页面
在创建页面中,将步骤2中ZOS的【文件(夹)地址、AK、SK】分别填入【导入方式的ZOS存储地址、数据源AK、数据源SK】,点击提交即可开始导入数据。并且可以设置同租户下哪些子用户可以同样看到和使用此数据集。
步骤4.使用基础数据集
数据集导入后,可以在基础数据集中查看导入进度。如果要大规模训练之前,可【加速到智算存储】通过HPFS并行文件系统进行数据存储和高吞吐的训练保障。
在启动开发机和训练任务的时候,均可选择到【基础数据集】,自动将数据集挂载到容器的挂载路径中,读取挂载路径即可使用基础数据集。
场景五:资源管理分配
步骤1.租户管理员创建和分配队列
登陆租户管理员账号,进入管理中心【队列管理】,
点击【创建队列】,可以为队列分配资源数量配额,所有使用此队列的用户的所有运行中的任务所用卡数之和不能超过配置的资源配额,超出则排队;管理员的权限高于成员,成员只能使用该队列的资源,管理员除了能使用资源以外,还能管理该队列,具体包含管理用户、编辑、更配、启动/停止、删除操作。
步骤2.子用户使用队列
前置条件:子用户被队列管理员添加为队列的【成员】、而且子用户要使用的功能被添加在队列的【负载类型】中。
使用方式:子用户均可在对应的负载任务——开发机、训练任务、服务部署、精调、评估、压缩中使用相应的队列。
步骤3.队列资源不足
问题1 队列总资源不足
如果队列的总体资源不够或者集群的总体资源不够,任务状态显示为【资源准备中】。
处理方法为:
这时只能扩大队列中的实例数量、或者减少任务需要的卡数和节点数。
问题2 队列任务把卡占满了导致空闲资源不足
如果队列的总体资源足够,则但是被其他用户的任务用满了,则任务状态显示为【排队中】。
处理方法为:
处理方法1 自然等待:等运行中任务释放&&空闲卡数>=等待任务所需卡数的时候,即可进入队列进行启动。
处理方法2 提升等待任务优先级:管理员可以在管理中心-资源总览-排队任务管理中,看到所有排队的任务,在操作列可以给所有排队的任务修改优先级。
处理方法3 关掉运行中的任务快速释放资源:管理员可以在管理中心-资源总览-运行任务管理中,看到所有运行中的任务,联系对应人员关闭不紧急的任务释放资源、或者紧急情况下管理员可以直接关停任何人的任务来释放资源给等待的任务。
步骤3.修改队列
负载类型修改:该队列支持的任务类型按最新修改生效。比如之前支持大模型评估,修改后不支持了,则后续评估任务选队列时,则不再展示该队列。修改队列不影响当前正在运行中的任务,只对后续创建的新任务生效。
实例规格修改:实例规格只有队列中没有存量运行中和排队中的任务才允许修改。若该队列的存量任务中存在正在运行的任务以及排队中的任务,则不能修改会拦截修改操作,反之可以修改。
实例数修改:
如果实例数调大,上限是:资源池内可支持的上限。若用户设置资源池上限无法提交修改。
如果实例数调小,下限是:队列里已分配的卡数与该队列里排队中的任务中单任务所需的最大卡数的较小值。若用户设置的低于这个数则无法提交修改。
说明:修改队列不影响当前正在运行中的任务,只对后续创建的新任务生效。
停止队列:队列停止后,则不可以继续往该队列里提交任务,存量任务还是会执行完。
启动队列:则可以继续向该队列里提交任务。