Skip to main content

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 "*"

根目录:

image-20240921000623784

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()"

image-20240921000444142

完美收官!!!!!!!

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连接

  1. 用第四步启动docker镜像

  2. 启动容器后,更新源

    apt-get update
  3. 在容器上安装并配置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文件

解决方案:

image-20241114221453686

21.2 报错缺少fused_ln

image-20241114221542442

解决方案:

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.如果你已经提交了本次提交

  1. 确保工作目录干净(没有未保存的更改):

    git status
  2. 使用 --amend 命令:

    git commit --amend

    这会打开编辑器让你修改提交信息,如果你不需要修改,可以直接保存退出。

    这样就会把当前提交的内容合并到上一次提交中,形成一个新的提交,原来的两个提交会变成一个。

2.如果你还没有提交(只是 git add 了)

你可以直接用 --amend 代替普通的 git commit

git commit --amend

注意事项:

  • 如果你已经把提交推送到了远程仓库,使用 --amend 后需要强制推送:

    git push --force