大模型部署手记(22)Ubuntu+TensorRT-LLM+通义千问

举报
张辉 发表于 2023/10/26 07:17:46 2023/10/26
【摘要】 大模型部署手记(22)Ubuntu+TensorRT-LLM+通义千问

张小白不禁打开了这个链接:https://github.com/Tlntin/Qwen-7B-Chat-TensorRT-LLM
看了下环境:

貌似不难满足:


记住:16G显存可以用int8。
docker已经有了:

安装nvidia-docker
切换到root用户:
sudo su -

贴这么长一段命令:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list \
&& \
sudo apt-get update


sudo apt-get install -y nvidia-container-toolkit


回到非root用户:
exit
cd ~
拉取项目代码:
git clone https://github.com/Tlntin/Qwen-7B-Chat-TensorRT-LLM.git -b release/0.5.0 cd Qwen-7B-Chat-TensorRT-LLM

编译docker镜像
# 拉取TensorRT-LLM仓库 git submodule update --init --recursive

安装Git的LFS版本:
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash

sudo apt-get install git-lfs

git lfs install

git lfs pull

这个步骤干了啥?(后来发现果然这步有问题

# 编译docker cd TensorRT-LLM/docker make release_build

报权限错了,应该用root执行:
su
make release_build


网络不好的时候要重试几次。
如何判断它还在下载?可以使用df看看剩余空间:


可以看到 / 的可用空间再不断的减少。。。


耐心等待到100%,然而并不是事事都能如愿:


很快就得到了回复:应该是有几个文件不对。

仔细比对了下,文件虽然都存在,但是大小不对:




文件应该是1点几兆,这里只有几百个字节。估计是前面git lfs安装异常,导致大文件没办法下载下来。
在没有修复git lfs 的情況下,直接从github下载文件,保存到相关目录:


重新编译:

耐心等待编译结束。。。


docker镜像编译完成。
使用docker images查看:


返回到项目路径 cd ../..
创建并启动容器,同时将本地qwen代码路径映射到/app/tensorrt_llm/examples/qwen路径
docker run --gpus all \
--name trt_llm \
-d \
--ipc=host \
--ulimit memlock=-1 \
--restart=always \
--ulimit stack=67108864 \
-v ${PWD}/qwen:/app/tensorrt_llm/examples/qwen \
tensorrt_llm/release sleep 8640000


docker ps查看正在運行的docker容器:


將下載好的QWen-7B-Chat模型放到 qwen/路径下:
張小白採用了以下方法:先把QWen-7B-Chat模型拷貝到移動硬盤上,然後接入到ubuntu上,
sudo fdisk -l查看是哪塊盤:

使用root執行:


cd /home/zhanghui/Qwen-7B-Chat-TensorRT-LLM/qwen
cp -r "/media/zhanghui/ LLM/models/Qwen/Qwen-7B-Chat" Qwen-7B-Chat
chown -R zhanghui:zhanghui Qwen-7B-Chat

进入docker容器里面的qwen路径,安装提供的Python依赖
docker ps
root@zhanghui-OMEN-by-HP-Laptop-17-ck0xxx:~# docker ps
CONTAINER ID   IMAGE                  COMMAND                   CREATED          STATUS          PORTS                NAMES
2a38419e5e8d   tensorrt_llm/release   "/opt/nvidia/nvidia_…"   23 minutes ago   Up 23 minutes   6006/tcp, 8888/tcp   trt_llm
docker exec -it 2a38419e5e8d /bin/bash

cd /app/tensorrt_llm/examples/qwen/

pip install -r requirements.txt


改一下目錄名稱
mv Qwen-7B-Chat qwen_7b_chat

修改编译参数
默认编译参数,包括batch_size, max_input_len, max_new_tokens, seq_length都存放在default_config.py
vi default_config.py
max_batch_size=1

对于16G显存用户,可以试试int8 (weight only)
python3 build.py --use_weight_only --weight_only_precision=int8

好像有點問題,它不会在连HF吧?
先保存下鏡像:
docker commit 2a38419e5e8d qwen-tensorrt-llm:v20231025

因爲張小白要重啓下電腦。

打开新的镜像,这样就不需要重新在镜像里面重装依赖包了。
cd /home/zhanghui/Qwen-7B-Chat-TensorRT-LLM/qwen

su 切换到root
删除前面所有的容器
docker stop 2a38419e5e8d
docker rm 2a38419e5e8d
docker stop 267281c60965
docker rm 267281c60965
cd /home/zhanghui/Qwen-7B-Chat-TensorRT-LLM
docker run --gpus all \
--name trt_llm_20231025 \
-d \
--ipc=host \
--ulimit memlock=-1 \
--restart=always \
--ulimit stack=67108864 \
-p 8000:8000 \
-p 7860:7860 \
-v ${PWD}/qwen:/app/tensorrt_llm/examples/qwen \
qwen-tensorrt-llm:v20231025 sleep 8640000

docker ps

进入新的容器:
docker exec -it 42687772b437 /bin/bash
cd /app/tensorrt_llm/examples/qwen/

python3 build.py --use_weight_only --weight_only_precision=int8


编译完成,试跑一下:
python3 run.py
如果输出Output: "您好,我是来自达摩院的大规模语言模型,我叫通义千问。<|im_end|>"说明成功

尝试终端对话
python3 cli_chat.py

可能输入了什么不可见字符。

再试一次:
python3 cli_chat.py
树上10只鸟,打死一只,还剩几只?
剩下的鸟不会跑吗?
那么,树上10只鸟,打死一只,到底还剩几只?
你怎么不知道变通呢?
你这个模型是怎么训练出来的?

言尽于此。。。老千,你耗子尾汁。

部署api,并调用api进行对话
python3 api.py


另开一个终端,进入qwen/client目录
cd ~/Qwen-7B-Chat-TensorRT-LLM/qwen/client
执行以下四种方式中的任意一种:
  • async_client.py,通过异步的方式调用api,通过SSE协议来支持流式输出。
  • normal_client.py,通过同步的方式调用api,为常规的HTTP协议,Post请求,不支持流式输出,请求一次需要等模型生成完所有文字后,才能返回。
  • openai_normal_client.py,通过openai模块直接调用自己部署的api,该示例为非流式调用,请求一次需要等模型生成完所有文字后,才能返回。。
  • openai_stream_client.py,通过openai模块直接调用自己部署的api,该示例为流式调用。

另外一个新的终端,在容器外面调用:
python normal_client.py
写一首赞美祖国的诗


好像没啥问题。其他的暂时不试了。

最后,尝试网页对话,回到容器里面:
将web_demo.py最后一行改为:
demo.queue().launch(server_name="0.0.0.0", share=False, inbrowser=False)

运行
python3 web_demo.py
浏览器打开 127.0.0.1:7860

这个很熟悉的界面,我们再玩玩:

貌似要连后台服务?难道前面的命令不能停?
打开新的终端进入容器
docker exec -it 42687772b437 /bin/bash
cd /app/tensorrt_llm/examples/qwen/

执行:
python3 api.py

切回到浏览器,继续聊!


好了,这次体验 TensorRT-LLM+通义千问 的过程差不多了。让我们期待下一次的体验。

BTW:对了,目前的容器要保存成镜像。
docker commit 42687772b437 qwen-tensorrt-llm:v20231025_02

(全文完,谢谢阅读)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。