【求助帖】Function Call实践(三)——微调Llama3-8B-Instruct模型(训练到中间会有内存压力而停止) #53
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
作业是关于用function_calling_small这个dataset来微调模型。首先下载数据集,使用命令:
huggingface-cli download Deepexi/function-calling-small --repo-type dataset --revision main --local-dir-use-symlinks False --local-dir
/code/function-calling-small
下载完成后看到数据集有3列,分别是“systempromt, userprompt, assistantResponse". 要转换成xtuner能用的格式,显示的信息是需要调节成为有“instruction,input,output”格式的数据集,试验发现训练要求有messages的列。回看例子的数据集,在messages下有三种不同的role以及相关的content组成的messages。 用下面的代码调整数据集。
数据示例:
{'messages': [{'content': '你是一个函数筛选助理,如果与问题相关的话,您可以使用下面的函数来获取更多数据以回答用户提出的问题:\n{"function": "CreateExportMigration", "description": "使用CreateExportMigration,新建DataWorks导出任务且仅创建导出任务。", "arguments": [{"name": "ProjectId", "type": "integer", "description": "DataWorks工作空间的ID。您可以登录DataWorks控制台,进入工作空间配置页面获取工作空间ID。"}, {"name": "Name", "type": "string", "description": "导出任务的名称。\n\n名称必须唯一,即当前DataWorks工作空间中不能存在名称重复的导出任务。"}, {"name": "ExportMode", "type": "string", "description": "任务的导出模式,取值如下:\n- FULL:全量导出目标任务。\n- INCREMENTAL:从指定的时间点开始,增量导出目标任务。选择该模式时,需要同时配置IncrementalSince参数。"}, {"name": "IncrementalSince", "type": "integer", "description": "增量导出目标任务的起始时间。\n\n当ExportMode参数配置为INCREMENTAL时,IncrementalSince参数才生效。"}, {"name": "ExportObjectStatus", "type": "string", "description": "导出任务的状态。系统会根据所选状态导出指定状态的任务。取值如下:\n- SAVED:保存状态,即导出已保存的任务。\n- SUBMITTED:提交状态,即导出已提交的任务。\n- DEPLOYED:发布状态,即导出已发布的任务。"}, {"name": "Description", "type": "string", "description": "导出任务的描述信息。"}]}\n\n{"function": "UpdateTicketNum", "description": "对用于免登嵌入报表的指定的ticket进行更新票据数量操作。", "arguments": [{"name": "Ticket", "type": "string", "description": "三方嵌入的票据值,即URL中的accessTicket值。"}, {"name": "TicketNum", "type": "integer", "description": "票据数。\n- 取值范围:1~99998,建议值为1。"}]}\n\n{"function": "CreateSavepoint", "description": "创建快照", "arguments": [{"name": "workspace", "type": "string", "description": "工作空间ID。"}, {"name": "namespace", "type": "string", "description": "项目空间名称。"}, {"name": "body", "type": "object", "description": "触发savepoint参数。"}]}\n\n"\n 请以如下格式回复::\n {\n "function": "function_name",\n "arguments": {\n "argument1": value1,\n "argument2": value2\n }\n }',
'role': 'system'},
{'content': ' "更新免登嵌入报表的票据数量为10的票据值为"abcd1234"。" ', 'role': 'user'},
{'content': '{\n "function": "UpdateTicketNum",\n "arguments": [\n {\n "Ticket": "abcd1234",\n "TicketNum": 10\n }\n ]\n}',
'role': 'assistant'}]}
修改训练程序的数据集加载:
在模型调试测试训练程序:NPROC_PER_NODE=4 xtuner train /code/llama3_8b_instruct_qlora_function_calling_small.py --work-dir /userhome/llama3-8b-ft/agent-flan --deepspeed deepspeed_zero3_offload
运行顺利:
按照课堂示例进入训练管理,然后启动任务,任务用6个节点开启,等待训练结果, 预计1天2小时训练结束:
1010次循环以后训练报错
查询得知可能是time out,尝试改善timeout的限制和通讯延迟,在run.sh里面加入:
再次训练可以成功训练至300次循环,类似的报错再次发生:
查看训练日志,发现loss迅速减小以后保持稳定,可能有过拟合的现象,但是没有完整训练过,不能判断,需要尝试在150次循环第一次降到0.1以下之前保存数据:
在llama3_8b_instruct_qlora_agentflan_3e.py里面修改存储的循环次数
再去xtuner包下面找到控制循环的程序: /opt/conda/lib/python3.10/site-packages/xtuner/engine/runner/loop.py
添加NCCL debug,在循环中加入缓存清理:
再次尝试训练
训练到1010循环,还是有报错:
Function Call实践(三)——微调Llama3-8B-Instruct模型to 【求助帖】Function Call实践(三)——微调Llama3-8B-Instruct模型(训练到中间会有内存压力而停止)