Paddle部署
1. 拉取paddle文件
git clone https://github.com/zty-king/Paddle
2. 进入 Paddle 目录下:
cd Paddle
3. 拉取Gpu版本的paddle镜像,百度镜像源
docker pull registry.baidubce.com/paddlepaddle/paddle:latest-dev-cuda12.0-cudnn8.9-trt8.6-gcc12.2
4. 启动docker镜像:
sudo docker run -d -p 8888:22 --ipc=host --gpus all --name pd -v /data/zheng/Paddle:/home/paddle -v /data/zheng/PaddleNLP:/home/paddlenlp -v/data/zheng/clash:/home/clash -it e95e59f25afc /bin/bash
其中参数解释如下:
--gpus all:启用所有的gpu
--ipc=host:让容器使用主机网络以实现跨机建立连接,进程共享,共享内存跑分布式代码必加的东西,不然会出大问题!!!
--name pd:指定容器名称为pd
-v $PWD:/paddle:$PWD
为当前主机所在的路径(启动容器时的路径),/paddle为容器中的paddle文件夹,该命令是让主机对应文件夹和容器的paddle文件夹组成共享文件夹,可以统一对文件夹中的文件做增删改查。
--net=host: 指定容器和宿主主机共享 Network namespace
-it e95e59f25afc:指定运行哪个容器,e95e59f25afc
为容器的ID
5. 在docker镜像中进入paddle安装梯子
5.1 将服务器上的clash文件夹复制过来,删除web文件夹(用不上)
5.2 删除external-controller;将mixed-port:7091改成mixed-port:7090;将dns中的 listen: '127.0.0.1:1054'改成 listen: '127.0.0.1:1053
5.3 vim ~/.bashrc 进入bashrc,添加以下两行:
alias clash="export http_proxy=http://127.0.0.1:7892;export https_proxy=http://127.0.0.1:7892"
alias unclash="unset http_proxy;unset https_proxy"
'先按esc,再输入:wq,回车保存退出
刷新bashrc:
source ~/.bashrc
5.4 进入clash文件夹,输入以下命令启动vpn服务
./clash -f yaml/mojie.yaml
5.5另外打开一个命令行,输入 clash
启动端口代理,正式启用梯子
6. 更新所有文件夹的安全性
在根目录,最底层目录 执行 将所有文件设置成安全文件夹(新版git会控制所有文件夹为非安全,得手动添加安全性):
git config --global --add safe.directory "*"
根目录:
7. 下载network包
从home 进入./paddle/python下载txt文件(主要是networkx)
cd ./paddle/python
pip3.9 install -r requirements.txt
8. 返回paddle根目录,更换batch
cd ..
git checkout develop
9. paddle根目录创建build文件夹:
mkdir -p /home/paddle/build && cd /home/paddle/build
10. 安装相关依赖:
ninja-build用于编译,比cmake快
pip3.9 install protobuf
apt install patchelf
apt install ninja-build
11. 用ninja编译:
cmake(可以提前写好编译的.sh文件,用bash启动文件)
bash build.sh
也可以直接终端启动
cmake .. -GNinja -DPY_VERSION=3.9 -DWITH_GPU=ON -DWITH_TESTING=ON -DCMAKE_BUILD_TYPE=Release -DWITH_DISTRIBUTE=ON -DWITH_PSCORE=OFF -DWITH_MKL=OFF -DCUDA_ARCH_NAME=Auto -DON_INFER=OFF
编译
ninja
12. 进入dist文件夹,下载编译好的paddle包:
cd /paddle/build/python/dist
ls
pip3.9 install -U paddlepaddle_gpu-0.0.0-cp39-cp39-linux_x86_64.whl(ls出来的文件名)
13. 测试分布式的代码
python -c "import paddle; paddle.utils.run_check()"
完美收官!!!!!!!
14.补充 授予文件权限
chmod 777 文件路径
15.提交前格式规范文档
pre-commit run --files python/paddle/hapi/hub.py test/legacy_test/test_load_state_dict_from_url.py /data/zheng/Paddle/test/legacy_test/CMakeLists.txt
16. 进入正在运行的docker镜像
sudo docker exec -it pd /bin/bash
17.测试单测
ctest -V -R test_load_state_dict_from_url
18.配置docker,使得可以本地远程ssh连接
用第四步启动docker镜像
启动容器后,更新源
apt-get update
在容器上安装并配置ssh 服务
安装 ssh server :
apt-get install openssh-server
启动sshd:
/usr/sbin/sshd -D &
更改密码:
passwd
4.修改配置,允许远程使用root账号ssh连接本机
修改/etc/ssh/sshd_config文件:
vim /etc/ssh/sshd_config
修改如下:允许root账户登录
PermitRootLogin yes
需要重启系统或者sshd服务
/etc/init.d/ssh stop
/etc/init.d/ssh start
service ssh restart
安装ssh服务后,系统默认开启系统sshd,查看sshd状态如果不是默认启动,修改服务为enable
systemctl enable ssh
启动sshd
/usr/sbin/sshd -D &
最后远程登录:
ssh -p 8888 root@121.48.164.41
19.同一个端口和IP的服务器如果重置了,当前本地得删除对应密钥,再连接生成新密钥
ssh-keygen -f "C:\Users\zzty\.ssh\known_hosts" -R "[121.48.164.41]:8888"
20.ssh连接docker与宿主机进入docker环境变量不一致
1./etc/profile末尾插入命令
vim /etc/profile
插入:
for item in `cat /proc/1/environ |tr '\0' '\n'`
do
export $item
done
export $(cat /proc/1/environ |tr '\0' '\n' | xargs)
2.在~/.bashrc末尾添加:(vim ~/.bashrc)
source /etc/profile
21.跑llama模型时,报错
21.1 报错缺少vocab文件
解决方案:
21.2 报错缺少fused_ln
解决方案:
cd 到PaddleNLP下的 ./slm/model_zoo/gpt-3/external_ops,执行python setup.py install
22.生成llama训练中,pipeline的可视化文件
python /home/paddle/python/paddle/distributed/auto_parallel/static/profiler_helper_static.py --devices 0,1,2 --log_dir /home/paddlenlp/llm/auto_parallel/llama/output/llama_7b_log1
23.训练分布式必须用以下命令启动,切记
python -m paddle.distributed.launch --devices 0,1 --log_dir ./log vpp_test.py
24.llama数据下载
### llama 模型数据下载
wget https://bj.bcebos.com/paddlenlp/models/transformers/llama/data/llama_openwebtext_100k.bin
wget https://bj.bcebos.com/paddlenlp/models/transformers/llama/data/llama_openwebtext_100k.idx
mkdir data
mv llama_openwebtext_100k.bin ./data
mv llama_openwebtext_100k.idx ./data
25.每次拉新的develop代码后要reinstall
pip install paddlepaddle_gpu-0.0.0-cp39-cp39-linux_x86_64.whl --force-reinstall
26.显卡占用却找不到进程
第一:查找使用显卡的进程:
fuser -v /dev/nvidia*
第二:一键杀死所有占用显卡的进程:
fuser -v /dev/nvidia* |awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sh
第三:如果docker内找不到进程,去杀死主机这个进程
27.git 拉取别人的pr
根据你提供的信息,PR的源分支是 xuxinyi389:enhance_processmesh
,目标分支是 PaddlePaddle:develop
。你可以通过以下步骤来拉取该 PR 的内容:
1. 确认你已经克隆了仓库
首先,确保你已经克隆了目标仓库。如果还没有,使用以下命令进行克隆:
git clone https://github.com/PaddlePaddle/Paddle.git
2. 添加 upstream
远程仓库
如果你还没有将原始仓库 PaddlePaddle/Paddle
添加为 upstream
远程仓库,使用以下命令:
git remote add upstream https://github.com/PaddlePaddle/Paddle.git
3. 拉取 PR 分支
拉取 xuxinyi389:enhance_processmesh
分支,你可以使用以下命令:
git fetch upstream pull/72052/head:pr-enhance_processmesh
72052
是 PR 的编号。pr-enhance_processmesh
是你本地新创建的分支名称,你可以根据需要进行修改。
4. 切换到 PR 分支
拉取 PR 后,切换到该分支:
git checkout pr-enhance_processmesh
5. 查看和测试代码
现在你可以查看和测试 enhance_processmesh
分支的代码。
6. 删除临时分支(可选)
如果你不再需要该临时分支,可以在测试完成后删除它:
git checkout main # 切换回主分支
git branch -d pr-enhance_processmesh # 删除临时分支
通过这些步骤,你就可以在本地拉取并查看 xuxinyi389:enhance_processmesh
分支的 PR 内容。
28.合并提交方法
1.如果你已经提交了本次提交
确保工作目录干净(没有未保存的更改):
git status
使用
--amend
命令:git commit --amend
这会打开编辑器让你修改提交信息,如果你不需要修改,可以直接保存退出。
这样就会把当前提交的内容合并到上一次提交中,形成一个新的提交,原来的两个提交会变成一个。
2.如果你还没有提交(只是 git add
了)
你可以直接用 --amend
代替普通的 git commit
:
git commit --amend
注意事项:
如果你已经把提交推送到了远程仓库,使用
--amend
后需要强制推送:git push --force