如何使用VSCode调试大模型训练代码
大模型开发/技术交流
- LLM
2024.10.31859看过
在开发和调试大模型训练代码时,使用print语句进行调试往往效率低下且容易遗漏重要信息。本文将介绍三种使用VSCode进行交互式debug的方法,让你的调试过程更加高效和精确。
准备工作
在开始之前,请确保:
-
已安装VSCode和Python扩展
-
在你的项目中已设置好训练环境
-
了解基本的断点设置方法(在代码行号左侧点击即可设置断点)
方法一:直接启动调试
这是最简单且功能完整的方法,支持单卡和多卡训练场景。
步骤一:创建调试配置
-
点击VSCode左侧的"运行和调试"图标(或按下
Ctrl+Shift+D
) -
点击"创建launch.json文件"
-
在弹出的选项中,选择"Python Debugger"
-
再选择"Python文件"

步骤二:使用LLamaFactory调试配置转换器
为了简化配置过程,LLamaFactory提供了一个便捷的调试配置转换器。你只需要:
-
将原始的训练命令粘贴到转换器中
-
点击"转换"按钮
-
复制生成的配置

步骤三:配置launch.json
将转换器生成的配置替换到
.vscode/launch.json
文件中。一个典型的多卡训练配置如下:
{"version": "0.2.0","configurations": [{"name": "debug.llamafactory.cn","type": "debugpy","request": "launch","module": "torch.distributed.run","console": "integratedTerminal","args": ["--nproc_per_node","4","--master_port","25644","src/llamafactory/launcher.py","--model_name","llama31","--dataset_name","data","--learning_rate","1e-4","--size_valid_set","0.05","--warmup_ratio","0.03","--optim","paged_adamw_32bit","--lr_scheduler_type","cosine","--per_device_train_batch_size","16","--per_device_eval_batch_size","16","--lora_alpha","16","--lora_r","8","--lora_target_modules","W_pack","--max_input_length","256","--max_output_length","64","--num_train_epochs","3","--evaluation_strategy","steps","--logging_steps","100","--save_steps","300","--eval_steps","500","--save_total_limit","5","--num_workers","64","--gradient_checkpointing","--ddp_find_unused_parameters","False","--logging_first_step","True","--output_dir","./output","--report_to","tensorboard"],"env": {"CUDA_VISIBLE_DEVICES": "\"0,1,2,3\""},"justMyCode": false}]}
步骤四:开始调试
-
在需要调试的代码处设置断点
-
点击左上角的绿色箭头(或按下F5)开始调试

方法二:监听端口调试
这种方法需要修改训练代码,适用于特定场景。
步骤一:添加调试代码
在训练的主函数(例如
https://github.com/hiyouga/LLaMA-Factory/blob/main/src/llamafactory/train/tuner.py#L43
)开始处,添加以下代码:
import osimport debugpy# 只在rank 0进程中启动调试器if int(os.environ.get('LOCAL_RANK', '0')) == 0:debugpy.listen(("localhost", 5678))print("⏳ 等待调试器附加...")debugpy.wait_for_client()print("🚀 调试器已附加!继续执行...")
步骤二:配置launch.json
{"version": "0.2.0","configurations": [{"name": "Python Debugger: Attach","type": "debugpy","request": "attach","connect": {"host": "localhost","port": 5678},"justMyCode": false}]}
步骤三:启动调试
-
正常启动训练脚本,例如:bash
CUDA_VISIBLE_DEVICES=6,7 llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml
-
当看到"⏳ 等待调试器附加..."时,在VSCode中选择"Python Debugger: Attach"
-
点击开始调试按钮
方法三:命令行参数调试
这种方法不需要修改代码,但只支持单卡调试。
步骤一:配置launch.json
与方法二相同的配置。
步骤二:修改启动命令
将原来的启动命令修改为:
CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 \--master_port 23456 \-m debugpy \--listen 5678 \--wait-for-client \src/train.py \examples/train_lora/llama3_lora_sft.yaml
步骤三:启动调试
-
运行修改后的命令
-
在VSCode中选择"Python Debugger: Attach"并开始调试
调试技巧
-
设置条件断点:右键点击断点,可以设置只在特定条件满足时才中断
-
查看变量:在调试面板中可以查看当前所有变量的值
-
监视表达式:添加监视可以实时查看特定表达式的值
-
使用调试控制台:可以在这里执行Python代码,实时查看结果
注意事项
-
方法一支持多卡调试,且配置最为简单,推荐优先使用
-
方法二和方法三中,调试器会等待VSCode连接,在连接前程序不会继续执行
-
使用调试器可能会略微影响训练速度,但这对调试过程的影响通常可以忽略
总结
通过本文介绍的三种方法,相信你已经可以根据不同场景选择合适的调试方式。特别推荐使用方法一,配合LlamaFactory的调试配置转换器,可以快速开始调试工作
————————————————
版权声明:本文为稀土掘金博主「不打灰的小刘」的原创文章
原文链接:https://juejin.cn/post/7420350639204171826
如有侵权,请联系千帆社区进行删除
评论
