如何用服务器远程运行/调试大语言模型项目
一些简单的代码我们使用Pycharm本地调试就能运行成功,但在诸如使用GPU进行分布式训练和推断等场景中,由于我们本地的电脑没有GPU或者没有多块GPU而无法运行这些程序。如果此时我们手头恰好有自己/公司/学校的GPU服务器资源,我们就可以使用这些GPU服务器进行远程调试/运行,无需本地运行代码。
本文将会详细介绍Pycharm的【远程开发】功能,使用该功能可以在本地电脑上轻松地调用服务器的硬件资源进行深度学习代码的远程调试和运行。另外,老版本Pycharm中也有一种使用SSH将本地项目代码与服务器项目代码进行【远程同步】,进而实现远程调试的方法,该方法在使用过程中存在诸多不便,因此不推荐使用。
lm-sys/FastChat: An open platform for training, serving, and evaluating large language models. Release repo for Vicuna and Chatbot Arena. (github.com)
这里我们以大语言模型知名项目FastChat为例,使用远程服务器调试/运行如下分布式训练代码:
torchrun --nproc_per_node=4 --master_port=20001 fastchat/train/train_mem.py \
--model_name_or_path ~/model_weights/llama-7b \
--data_path data/dummy_conversation.json \
--bf16 True \
--output_dir output_vicuna \
--num_train_epochs 3 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 2 \
--gradient_accumulation_steps 16 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 1200 \
--save_total_limit 10 \
--learning_rate 2e-5 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--fsdp "full_shard auto_wrap" \
--fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \
--tf32 True \
--model_max_length 2048 \
--gradient_checkpointing True \
--lazy_preprocess True
在开始之前,我们首先需要知道GPU服务器的IP地址、用户名及密码,如果不知道密码,也可以使用私钥的形式。同时将FastChat项目git clone到远程服务器的指定位置,这里我克隆到了/data0/csw/FastChat。
一、本地安装专业版Pycharm
这里我们需要使用本地Pycharm远程连接GPU服务器,由于社区版Pycharm没有这样的功能,所以需要安装专业版Pycharm。专业版的安装及永久激活教程如下,建议安装教程支持的2022.3.1版本Pycharm。
2022最新pycharm激活码,全网唯一!pycharm最新版2022.2 简单一键激活2099年
二、本地连接远程服务器
打开本地安装好的专业版Pycharm,点击【文件】→【远程开发】。
按上图所示新建与远程服务器的SSH连接。
由于我们此前并未配置过SSH连接,因此需要点击上图右侧的齿轮图标新建连接。
点击【+】号新建连接,同时输入远程服务器的IP地址、用户名、密码/私钥文件,之后点击【测试连接】,如果成功即可进行下一步操作。
SSH连接配置完成后,点击右下角的【检查连接并继续】,系统会在远程服务器安装Pycharm,此处可能需要等待一会儿。
远程服务器的Pycharm下载完成后,我们需要指定FastChat项目在服务器中的具体路径(需要自行将FastChat项目git clone到指定位置),以方便远程服务器打开该项目。
如果一切成功,将会弹出一个如上图所示的新界面。此处的FastChat项目即为远程服务器中的FastChat项目,在该界面中对文件的一切改动都将即时同步到远程服务器。
三、配置远程解释器
在正式调试/运行程序之前,我们还需要为项目配置远程解释器,即Python环境。这里使用的是我自己为FastChat项目配置的环境csw_fastchat_newest,也可使用如下指令新建一个这样的环境:
conda create -n csw_fastchat_newest python=3.10.6
conda activate csw_fastchat_newest
pip3 install "fschat[model_worker,webui]"
环境安装好后,我们可以在远程服务器的Pycharm界面中先后点击左上角的【文件】→【设置】。
在设置界面中再点击【项目: FastChat】→【Python Interpreter】→【Add Local Interpreter】。
如上图所示输入csw_fastchat_newest环境Python解释器的路径即可完成解释器相关的配置。
由于我将Anaconda安装在了/data0/anaconda3/路径下,因此csw_fastchat_newest环境中Python解释器的路径即为/data0/anaconda3/envs/csw_fastchat_newest/bin/python,如果你的Anaconda安装在了其他路径,上述Python解释器的路径也可泛化为${your_anaconda_path}/envs/csw_fastchat_newest/bin/python,下文有关解释器路径的部分同理。
四、远程调试和运行多进程程序
torchrun --nproc_per_node=4 --master_port=20001 fastchat/train/train_mem.py \
--model_name_or_path ~/model_weights/llama-7b \
--data_path data/dummy_conversation.json \
--bf16 True \
--output_dir output_vicuna \
--num_train_epochs 3 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 2 \
--gradient_accumulation_steps 16 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 1200 \
--save_total_limit 10 \
--learning_rate 2e-5 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--fsdp "full_shard auto_wrap" \
--fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \
--tf32 True \
--model_max_length 2048 \
--gradient_checkpointing True \
--lazy_preprocess True
此处我们使用上述FastChat官方项目中的torchrun分布式训练指令作为演示,由于torchrun本身是torch包的一个具体模块,因此需要使用模块化的思路来运行torchrun,这和我们以前使用类似python test.py运行程序的思路不太一样。
- 为了模块化调试/运行torchrun代码,我们首先需要将conda环境中torch包的路径软链接到远程服务器的FastChat路径下,此时使用如下代码进行软链接:
cd /data0/csw/FastChat
ln -s /data0/anaconda3/envs/csw_fastchat_newest/lib/python3.10/site-packages/torch .
2. 之后在远程服务器的Pycharm界面中点击【运行】→【编辑配置】,来配置具体的程序执行信息。
点击【+】号,选择【Python】。
3. 此时按上图所示填入:
- 【Module name】:torch.distributed.run
- 【Parameters】:torchrun指令后的所有参数信息,即从"–nproc_per_node=4"一直到"–lazy_preprocess True"
- 【Environment variables】:PYTHONUNBUFFERED=1;CUDA_VISIBLE_DEVICES=0,1,2,3
- 【Python interpreter】:此处csw_fastchat_newest环境中的python解释器路径为/data0/anaconda3/envs/csw_fastchat_newest/bin/python
- 【Working directory】:/data0/csw/FastChat
其他不用填写,注意将默认的【Script path】改成上图红框里的【Module name】。
4. 配置完成后,远程服务器Pycharm界面的右上角会出现上述字样,此时就可以使用远程Pycharm进行程序的运行/调试啦!
另外,很多深度学习项目用的不是torchrun,而是deepspeed来运行。此时只要将第1步添加软链接的部分改成如下代码:
cd /data0/csw/FastChat
ln -s /data0/anaconda3/envs/csw_fastchat_newest/lib/python3.10/site-packages/deepspeed .
同时将第3步【Module name】改成 deepspeed.launcher.runner 即可,其余部分同torchrun。
五、远程调试和运行单进程程序
另外,如果使用远程服务器运行或调试的是常规类似python /data0/csw/FastChat/test.py(test.py是我虚构的)这样的单进程程序,那么【Module name】需要改成【Script path】,同时填入:
- 【Script path】:test.py
- 【Parameters】:有参数填参数,没参数就不填
- 【Python interpreter】:此处csw_fastchat_newest环境中的python解释器路径为/data0/anaconda3/envs/csw_fastchat_newest/bin/python
- 【Working directory】:/data0/csw/FastChat
到这里,使用远程服务器运行或调试深度学习项目的分享就结束啦,这是我的第一篇分享,请不要吝啬您的点赞,后续我也会分享更多有趣、有价值的深度学习内容。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/4223.html