邯鄲專業(yè)做網(wǎng)站哪里有網(wǎng)站收錄查詢網(wǎng)
一、目錄
- 作用
- TensorRT-llm 為什么快?
- 流程
- TensorRT-LLM 環(huán)境配置
- 大模型 轉(zhuǎn)換、編譯與推理
- 如何選擇量化類型?
- lora 大模型如何合并?
- lora 大模型如何編譯,使用?
- 推理加速模型 tensorrRT-LLM、Vllm、fasterTransformer、BetterTransformer 的對比
- 如何優(yōu)化 LLM 模型推理中的訪存密集問題?
二、實現(xiàn)
- 作用
NVIDIA提出, TensorRT-LLM 默認采用 FP16/BF16 的精度推理,并且可以利用業(yè)界的量化方法,使用硬件吞吐更高的低精度推理進一步推升推理性能。 - TensorRT-llm 為什么快?
1. 模型預編譯,并優(yōu)化內(nèi)核
2. 模型進行量化
3. In-flight批處理
4. page attention 以及高效緩存K、V. - 流程
1. huggingface 模型—>tensorRT-llm模型(模型轉(zhuǎn)換)---->轉(zhuǎn)為trt引擎----->trt引擎推理。 - TensorRT-LLM 環(huán)境配置
1. 下載tensorRT-LLM 項目,注意,下載0.8.0, 其中0.9.0問題較多git clone -b v0.8.0 https://github.com/NVIDIA/TensorRT-LLM.git
cd TensorRT-LLM- 創(chuàng)建容器(cuda 最好是大于12.2), 也可以是其他容器,該容器包含tritonserver服務(wù)。
docker pull nvcr.io/nvidia/tritonserver:24.02-trtllm-python-py3
- 創(chuàng)建容器(cuda 最好是大于12.2), 也可以是其他容器,該容器包含tritonserver服務(wù)。
docker run --gpus all
–name trt_llm
-d
–ipc=host
–ulimit memlock=-1
–restart=always
–ulimit stack=67108864
-p 8000:8000
-p 7860:7860
-v ${PWD}/examples:/app/tensorrt_llm/examples
nvcr.io/nvidia/tritonserver:24.02-trtllm-python-py3 sleep 8640000
- 安裝tensorRT-LLM
>>pip install tensorrt_llm==0.8.0 --extra-index-url https://pypi.nvidia.com --extra-index-url https://download.pytorch.org/whl/cu121 - 檢查安裝
>> python3 -c “import tensorrt_llm” 生成版本號。 - 安裝大模型本身需要的環(huán)境。
參考:https://github.com/Tlntin/Qwen-TensorRT-LLM
4.大模型 轉(zhuǎn)換、編譯與推理
>>cd TensorRT-LLM/examples/bloom
文件1. convert_checkpoint.py: 將hf 模型轉(zhuǎn)為tensorRT-LLM格式模型。
文件2. …/run.py 推理文件, 根據(jù)需求進行相應(yīng)的修改
文件3. …/summarize.py 在cnn_dailymail 數(shù)據(jù)集中的測試文本。生成rouge 結(jié)果
文件4 benchmark.py 測試吞吐量
方式一、含有build.py 文件
1. 編譯 參考:https://github.com/Tlntin/Qwen-TensorRT-LLM
>>python3 build.py --添加參數(shù)
2. 使用
>> python3 run.py
方式二、不含有build.py 文件
1. 模型量化 參考:https://github.com/NVIDIA/TensorRT-LLM/tree/main/examples/qwen
>># Build the Qwen-7B-Chat model using a single GPU and FP16.
python convert_checkpoint.py --model_dir ./tmp/Qwen/7B/
–output_dir ./tllm_checkpoint_1gpu_fp16
–dtype float16
2. 創(chuàng)建引擎
trtllm-build --checkpoint_dir ./tllm_checkpoint_1gpu_fp16
–output_dir ./tmp/qwen/7B/trt_engines/fp16/1-gpu
–gemm_plugin float16
- 使用
python3 …/run.py --input_text “你好,請問你叫什么?”
–max_output_len=50
–tokenizer_dir ./tmp/Qwen/7B/
–engine_dir=./tmp/Qwen/7B/trt_engines/fp16/1-gpu/
方式三、自己修改,寫build.py 文件
1. 官網(wǎng)下載benchmarks/python下的build.py 文件, 進行修改,同時需要進一步修改模型
后續(xù)…
生成文件:
文件1:config.json 配置文件
文件2:rank0.engine 驅(qū)動引擎
5.如何選擇量化類型?
訓練后 量化類型:1. fp16、int8(weight only)、int4(weight only)
2. smooth quant量化:SmoothQuant 通過平滑激活層和權(quán)重后,再使用per-tensor或per-token量化,實現(xiàn)W8A8。根據(jù)量化方式不同,作者提出三種策略 O1、O2、O3,計算延遲依次降低。
與其他量化方法相比,該方法可以保持較高的精度,同時,具有更低的延遲。
3. int8-kv-cache量化: KV Cache 量化是指將逐 Token(Decoding)生成過程中的上下文 K 和 V 中間結(jié)果進行 INT8 量化(計算時再反量化),以降低生成過程中的顯存占用。
4. int4-gptq 量化:所有權(quán)重壓縮到4位量化中,通過最小化與該權(quán)重的均方誤差來實現(xiàn)。在推理過程中,它將動態(tài)地將權(quán)重解量化為float16,以提高性能,同時保持內(nèi)存較低。
5. int4-awq 量化:激活感知的權(quán)重量化。 在量化過程中,有一小部分權(quán)重將被跳過,這有助于減少量化損失。
模型越大,對僅權(quán)重和KV緩存量化的容忍度越高,而對激活量化的容忍度較低。
對于大多數(shù)NLP任務(wù),將大多數(shù)LLM家族量化為W4、W4A8、KV4和W8KV4,性能損失可以忽略不計(<2%)。在一定的內(nèi)存預算下,使用量化到W3的較大模型可以獲得更優(yōu)性能。
在四種突出能力(即上下文學習、指令遵循、多步推理和自校準)中,自校準和多步推理能力對量化更敏感。對于小于13B的LLMs,推薦使用W8、W8A8和KV8量化。
對于倫理任務(wù),小型模型對量化的敏感性更高。僅權(quán)重量化會增強模型對敏感信息的判斷,而KV緩存量化則有相反的效果。
LLMs在處理長文本(>4k)時,對僅權(quán)重和KV緩存量化的敏感性高于短文本(<4k),尤其是對KV緩存量化。在大多數(shù)情況下,W4、W4A8和KV8可以在長上下文任務(wù)中保持性能。
最先進的量化方法,如SmoothQuant和AWQ,在量化造成的性能損失適中時,可以有效提升性能。然而,當使用極低位寬時,AWQ和SmoothQuant無法恢復完全損壞的性能。
參考:https://zhuanlan.zhihu.com/p/695144724
- lora 大模型如何合并?
https://blog.csdn.net/BIT_666/article/details/132065177