问题描述
使用vscode可以很方便地添加断点,进行代码调试。
在使用服务器时,我们的python代码通常是通过bash脚本来执行的,那么如何进行debug呢?
待运行的bash 脚本示例
前半段定义了一些参数,后半段是执行python代码
export CUDA_VISIBLE_DEVICES=1,2
model_path=/models/Mistral-7B-Instruct-v0.2/
output_path=/project/datagen/evaluation/mmlu
data_path=/mmlu_datapython -m eval_mmlu.py \--model ${model_path} \--data_dir ${data_path} \--save_dir ${output_path} \--ntrain 5 \--subject elementary_mathematics \
如果我们想要运行bash脚本的同时进行调试python代码,很可惜,右上角并没有类似调试python文件时的虫虫debug符号
解决方式
第零步,下载debugpy
pip install debugpy
第一步,修改launch.json文件
输入ctrl + p, 查找launch.json文件,用于配置调试设置
{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "Python 调试程序: 当前文件","type": "debugpy","request": "attach","connect": {"host": "localhost","port": 8890}}]
}
我们在本地的8890端口上开放了调试连接。使用这个配置,VS Code的调试器将尝试连接到这个运行中的程序,允许你进行调试
第二步,修改bash脚本
在执行python文件前加上
-m debugpy --listen localhost:8890 --wait-for-client \
完整代码如下
export CUDA_VISIBLE_DEVICES=1,2
model_path=/models/Mistral-7B-Instruct-v0.2/
output_path=/project/datagen/evaluation/mmlu
data_path=/mmlu_datapython -m debugpy --listen localhost:8890 --wait-for-client \eval_mmlu.py \--model ${model_path} \--data_dir ${data_path} \--save_dir ${output_path} \--ntrain 5 \--subject elementary_mathematics \
通过使用debugpy并在8890端口上监听,这个脚本允许VS Code连接并进行远程调试,这与之前提到的launch.json配置相匹配。