2024-11-21
深度学习
00

目录

官网文档:
tensorrtllm_backend
启动容器
准备 TensorRT-LLM 引擎文件
准备 Triton 模型库
修改 Triton 模型配置
使用 TensorRT-LLM 模型启动 Triton 服务器
客户端访问

官网文档:

https://nvidia.github.io/TensorRT-LLM/quick-start-guide.html#launch-the-docker

https://github.com/triton-inference-server/tensorrtllm_backend

tensorrtllm_backend

bash
git clone https://github.com/triton-inference-server/tensorrtllm_backend.git cd tensorrtllm_backend git submodule update --init --recursive git lfs install git lfs pull

挺大:2.5G tensorrtllm_backend/

启动容器

bash
docker run --rm -it --net host --shm-size=4g \ --ulimit memlock=-1 --ulimit stack=67108864 --gpus device=1 \ -v /data/xiedong/tensorrtllm_backend:/tensorrtllm_backend \ -v /data/xiedong/engines:/engines \ -v /data/xiedong/Qwen2.5-14B-Instruct/:/Qwen2.5-14B-Instruct/ \ nvcr.io/nvidia/tritonserver:24.10-trtllm-python-py3

这里选镜像:

https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver/tags

准备 TensorRT-LLM 引擎文件

bash
cd /tensorrtllm_backend/tensorrt_llm/examples/qwen # Convert weights from HF Tranformers to TensorRT-LLM checkpoint python3 convert_checkpoint.py --model_dir /Qwen2.5-14B-Instruct \ --dtype float16 \ --tp_size 1 \ --output_dir ./tllm_checkpoint_1gpu_bf16 # Build TensorRT engines trtllm-build --checkpoint_dir ./tllm_checkpoint_1gpu_bf16 \ --gemm_plugin float16 \ --output_dir /engines/gpt/fp16/1-gpu

准备 Triton 模型库

Triton 推理服务器提供来自启动服务器时指定的一个或多个模型存储库的模型。在 Triton 运行时,可以按照模型管理中的说明修改所提供服务的模型。

这些存储库路径是在使用 --model-repository 选项启动 Triton 时指定的。可以多次指定 --model-repository 选项以包含来自多个存储库的模型。组成模型存储库的目录和文件必须遵循所需的布局。假设存储库路径指定如下。

https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_repository.md

bash
mkdir /engines/triton_model_repo/ cp -r /tensorrtllm_backend/all_models/inflight_batcher_llm/* /engines/triton_model_repo/

修改 Triton 模型配置

  • max_batch_size定义引擎可以处理的最大请求数。
  • max_seq_len定义单次请求的最大序列长度。
  • max_num_tokens定义每批删除填充后批量输入标记的最大数量。

填写配置参数:

bash
ENGINE_DIR=/engines/gpt/fp16/1-gpu TOKENIZER_DIR=/Qwen2.5-14B-Instruct # HF模型所在 MODEL_FOLDER=/engines/triton_model_repo TRITON_MAX_BATCH_SIZE=1 # 可以多给点,我这里为了测试下显存,给1 INSTANCE_COUNT=1 MAX_QUEUE_DELAY_MS=0 MAX_QUEUE_SIZE=0 FILL_TEMPLATE_SCRIPT=/tensorrtllm_backend/tools/fill_template.py DECOUPLED_MODE=false python3 ${FILL_TEMPLATE_SCRIPT} -i ${MODEL_FOLDER}/ensemble/config.pbtxt triton_max_batch_size:${TRITON_MAX_BATCH_SIZE} python3 ${FILL_TEMPLATE_SCRIPT} -i ${MODEL_FOLDER}/preprocessing/config.pbtxt tokenizer_dir:${TOKENIZER_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},preprocessing_instance_count:${INSTANCE_COUNT} python3 ${FILL_TEMPLATE_SCRIPT} -i ${MODEL_FOLDER}/tensorrt_llm/config.pbtxt triton_backend:tensorrtllm,triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},decoupled_mode:${DECOUPLED_MODE},engine_dir:${ENGINE_DIR},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MS},batching_strategy:inflight_fused_batching,max_queue_size:${MAX_QUEUE_SIZE} python3 ${FILL_TEMPLATE_SCRIPT} -i ${MODEL_FOLDER}/postprocessing/config.pbtxt tokenizer_dir:${TOKENIZER_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},postprocessing_instance_count:${INSTANCE_COUNT},max_queue_size:${MAX_QUEUE_SIZE} python3 ${FILL_TEMPLATE_SCRIPT} -i ${MODEL_FOLDER}/tensorrt_llm_bls/config.pbtxt triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},decoupled_mode:${DECOUPLED_MODE},bls_instance_count:${INSTANCE_COUNT}

填充完之后,各个文件夹下面是有一些配置文件的:

bash
root@GZ-LG401-G1-DOCKER-node-gpu-8:triton_model_repo# tree -L 2 . |-- ensemble | |-- 1 | `-- config.pbtxt |-- postprocessing | |-- 1 | `-- config.pbtxt |-- preprocessing | |-- 1 | `-- config.pbtxt |-- tensorrt_llm | |-- 1 | `-- config.pbtxt `-- tensorrt_llm_bls |-- 1 `-- config.pbtxt 10 directories, 5 files

使用 TensorRT-LLM 模型启动 Triton 服务器

bash
# 'world_size' is the number of GPUs you want to use for serving. This should # be aligned with the number of GPUs used to build the TensorRT-LLM engine. python3 /tensorrtllm_backend/scripts/launch_triton_server.py --world_size=1 --model_repo=${MODEL_FOLDER}

这个日志表示启动成功:

bash
I1122 06:29:55.578920 145 grpc_server.cc:2558] "Started GRPCInferenceService at 0.0.0.0:8001" I1122 06:29:55.579121 145 http_server.cc:4713] "Started HTTPService at 0.0.0.0:8000" I1122 06:29:55.620023 145 http_server.cc:362] "Started Metrics Service at 0.0.0.0:8002"

要停止容器内的 Triton 服务器,请运行:

bash
pkill tritonserver
  • text_input:输入文本以生成响应
  • max_tokens:请求的输出 token 数量
  • bad_words:脏话列表(可以为空)
  • stop_words:停用词列表(可以为空)
bash
curl -X POST http://101.136.8.66:8000/v2/models/ensemble/generate -d '{"text_input": "你是什么模型?", "max_tokens": 200, "bad_words": "", "stop_words": ""}'

返回:

bash
# curl -X POST http://101.136.8.66:8000/v2/models/ensemble/generate -d '{"text_input": "你是谁?", "max_tokens": 200, "bad_words": "", "stop_words": ""}' {"model_name":"ensemble","model_version":"1","sequence_end":false,"sequence_id":0,"sequence_index":0,"sequence_start":false,"text_output":"你是谁?你从哪里来?你到哪里去?这是哲学家们思考的问题。对于企业来说,这三个问题同样重要。企业从哪里来,决定了它的基因;企业到哪里去,决定了它的战略;而企业是谁,则决定了它的文化。企业文化是企业的灵魂,是企业发展的内在驱动力。企业文化是企业价值观、企业精神、企业制度、企业行为规范等的总和,是企业长期发展过程中形成的一套独特的、稳定的、具有鲜明个性的企业文化体系。\n企业文化是企业的灵魂,是企业发展的内在驱动力。企业文化是企业价值观、企业精神、企业制度、企业行为规范等的总和,是企业长期发展过程中形成的一套独特的、稳定的、具有鲜明个性的企业文化体系。\n企业文化是企业发展的内在驱动力。企业文化是企业价值观、企业精神、企业制度、企业行为规范等的总和,是企业长期发展过程中形成的一套独特的、稳定的、具有鲜明个性的企业文化体系。企业文化"}

客户端访问

https://github.com/triton-inference-server/tensorrtllm_backend/tree/main/inflight_batcher_llm/client

安装环境

bash
pip3 install tritonclient[all] pip install transformers

访问例子:

bash
python3 /data/xiedong/tensorrtllm_backend/inflight_batcher_llm/client/inflight_batcher_llm_client.py --request-output-len 200 --tokenizer-dir "/data/xiedong/Qwen2.5-14B-Instruct"
bash
python3 /data/xiedong/tensorrtllm_backend/inflight_batcher_llm/client/end_to_end_grpc_client.py \ --url "localhost:8001" --streaming --output-len 100 \ --prompt "你是谁?"
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!