赞
踩
©作者 | 紫气东来
测试模型:
https://huggingface.co/FlagAlpha/Llama2-Chinese-13b-Chat/tree/main
测试设备:
A6000
vllm 此前也多次讨论,部署简单且高效,首先起一个本地的服务
- python3 -m vllm.entrypoints.api_server --model ckpt/FlagAlp
- ha/Llama2-Chinese-13b-Chat/
接着使用测试集请求服务
python3 benchmark_serving.py --dataset ShareGPT_V3_unfiltered_cleaned_split.json --tokenizer ckpt/FlagAlpha/Llama2-Chinese-13b-Chat/
性能如下所示:
TGI 是 HuggingFace 官方支持的推理部署工具,具有以下特点:
和 vllm 类似的 continuous batching
支持了 flash-attention 和 Paged Attention。
支持了 Safetensors 权重加载。
TGI 支持部署 GPTQ 模型服务,这使得我们可以在单卡上部署拥有 continous batching 功能的,更大的模型。
支持采用 Tensor Parallelism 部署多 GPU 服务,模型水印等其他功能
可以通过 docker 安装,拉取最新的镜像:
docker pull ghcr.io/huggingface/text-generation-inference:1.0.0
在容器里使用 GPU,需要安装 nvida container toolkit,其命令如下:
- sudo apt-get update
- sudo apt-get install -y nvidia-container-toolkit
- sudo nvidia-ctk runtime configure --runtime=docker
- sudo systemctl restart docker
如果要进行本地测试,可以通过源码安装(以下在 ubuntu 上安装):
依赖安装
- # 如果没有网络加速的话,建议添加 pip 清华源或其他国内 pip 源
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- apt-get install cargo pkg-config git
下载 protoc
- PROTOC_ZIP=protoc-21.12-linux-x86_64.zip
- curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v21.12/$PROTOC_ZIP
- sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
- sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*'
- rm -f $PROTOC_ZIP
如果没有网络加速的话,建议修改 cargo 源。有网络加速可略过。
- # vim ~/.cargo/config
- [source.crates-io]
- registry = "https://github.com/rust-lang/crates.io-index"
-
- replace-with = 'tuna'
-
- [source.tuna]
- registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
-
- [net]
- git-fetch-with-cli=true
TGI 根目录下执行安装:
BUILD_EXTENSIONS=True make install # Install repository and HF/transformer fork with CUDA kernels
安装成功,添加环境变量到 .bashrc 中 export PATH=/root/.cargo/bin:$PATH
执行 text-generation-launcher --help ,有输出表示安装成功。
安装完成后,部署服务如下:
- docker run --rm \
- --gpus all \
- -p 5001:5001 \
- -v $PWD/tgi_data:/data \
- ghcr.io/huggingface/text-generation-inference:1.0.0 \
- --model-id /data/Llama2-Chinese-13b-Chat/ \
- --hostname 0.0.0.0 \
- --port 5001 \
- --dtype float16 \
- --num-shard 8 \
- --sharded true
参数及使用方法可参考这里。
性能如下:
可以看出,更新后的 TGI 性能优于 vllm。
FasterTransformer
FasterTransformer 通常和 Triton 搭配使用,首先需要安装 Triton Inference Server ,选择合适的版本,此处选择22.05
sudo docker pull nvcr.io/nvidia/tritonserver:22.05-py3
安装并进行测试
- # 下载官方提供的模型
- git clone https://github.com/triton-inference-server/server.git
- cd ./server/docs/examples
- ./fetch_models.sh
- # 启动triton server
- docker run --gpus=1 --rm --net=host -v ${PWD}/model_repository:/models nvcr.io/nvidia/tritonserver:22.05-py3 tritonserver --model-repository=/models
-
- curl -v localhost:8000/v2/health/ready
- # Use docker pull to get the client libraries and examples image from NGC.
- sudo docker pull nvcr.io/nvidia/tritonserver:22.05-py3-sdk
- # Run the client image
- sudo docker run --gpus all -it --rm --net=host nvcr.io/nvidia/tritonserver:22.05-py3-sdk
- # run the inference example
- /workspace/install/bin/image_client -m densenet_onnx -c 3 -s INCEPTION /workspace/images/mug.jpg
安装完后进一步构建镜像
- export BUILD_DICTIONARY="/data/build"
- export TRITON_VERSION=22.05
-
- cd $BUILD_DICTIONARY
- git clone https://github.com/Rayrtfr/fastertransformer_backend.git
- cd $BUILD_DICTIONARY/fastertransformer_backend
-
- docker build --build-arg TRITON_VERSION=${TRITON_VERSION} -t triton_ft_backend:${TRITON_VERSION}-v-1 -f docker/Dockerfile .
启动镜像并进入
- docker run -idt --gpus=all --net=host --shm-size=4G --name triton_ft_backend_pure \
- -v $PWD:/data \
- -p18888:8888 -p18000:8000 -p18001:8001 -p18002:8002 triton_ft_backend:${TRITON_VERSION}-v-1 bash
在容器内使用FasterTransformer将Llama2-Chinese-13b-Chat的权重转换为二进制
- git clone https://github.com/Rayrtfr/FasterTransformer.git
- cd FasterTransformer
-
- mkdir models && sudo chmod -R 777 ./*
- python3 ./examples/cpp/llama/huggingface_llama_convert.py \
- -saved_dir=./models/llama \
- -in_file=../Llama2-Chinese-13b-Chat \
- -infer_gpu_num=1 \
- -weight_data_type=fp16 \
- -model_name=llama
修改模型配置
- mkdir triton-model-store
- cd triton-model-store/
-
- cp -r fastertransformer_backend/all_models/llama triton-model-store/
编辑 config.pbtxt
- # 修改 triton-model-store/llama/fastertransformer/config.pbtxt
- parameters {
- key: "tensor_para_size"
- value: {
- string_value: "1"
- }
- }
-
- ## 修改 model_checkpoint_path 为上面转换之后的路径
- parameters {
- key: "model_checkpoint_path"
- value: {
- string_value: "/data/FasterTransformer/models/llama/1-gpu/"
- }
- }
-
- ## 修改 FasterTransformer/examples/cpp/llama/llama_config.ini
- model_name=llama_13b
- model_dir=/data/FasterTransformer/models/llama/1-gpu/
-
- # 修改这两个文件 triton-model-store/llama/preprocess/1/model.py triton-model-store/llama/postprocess/1/model.py
- # 检查 这个路径为tokenier对应的路径
- self.tokenizer = LlamaTokenizer.from_pretrained("/data/Llama2-Chinese-13b-Chat")
编译 FasterTransformer
- cd FasterTransformer
- mkdir build && cd build
-
- git submodule init && git submodule update
- pip3 install fire jax jaxlib transformers
-
- cmake -DSM=86 -DCMAKE_BUILD_TYPE=Release -DBUILD_PYT=ON -DBUILD_MULTI_GPU=ON -D PYTHON_PATH=/usr/bin/python3 ..
- make -j12
- make install
在容器内启动 triton server
CUDA_VISIBLE_DEVICES=0 /opt/tritonserver/bin/tritonserver --model-repository=triton-model-store/llama/
结果如下:
- I0730 13:59:40.521892 33116 grpc_server.cc:4589] Started GRPCInferenceService at 0.0.0.0:8001
- I0730 13:59:40.523018 33116 http_server.cc:3303] Started HTTPService at 0.0.0.0:8000
- I0730 13:59:40.564427 33116 http_server.cc:178] Started Metrics Service at 0.0.0.0:8002
启动 client 测试
python3 fastertransformer_backend/inference_example/llama/llama_grpc_stream_client.py
输出结果
- seq_len:148 token_text:<s><s><unk> : 北京有什么?
- </s><s>Assistant: 北京是中国的首都,也是一座历史悠久,文明古老的城市。它拥有丰富的历史遗产和文化财宝,包括万家宫、故宫、颐和园、香山、大观园、长顺寺等等。此外,北京也拥有丰富的吃的、喝的、看
性能及 TP 相关测试进行中。。。
参考资料
[1] vllm vs TGI 部署 llama v2 7B 踩坑笔记 (https://zhuanlan.zhihu.com/p/645732302)
[2] https://github.com/FlagAlpha/Llama2-Chineseama2-Chinese
[3] https://https://vilsonrodrigues.medium.com/serving-falcon-models-with-text-generation-inference-tgi-5f32005c663b
/serving-falcon-models-with-text-generation-inference-tgi-5f32005c663b
更多阅读
#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。