主流推理框架哪家强?看看它们在Llama 2上的性能比较

b81b02891dd139b0681d150fab19904b.gif

©作者 | 紫气东来

测试模型:

https://huggingface.co/FlagAlpha/Llama2-Chinese-13b-Chat/tree/main

测试设备:

A6000

3d3dad4a128cff2df358a1bd06bee3f7.png


vLLM

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/

性能如下所示:

2e6a7d7706260ffe688f1162e994e66f.png

3338abb4a856b3c41ba779afba628f49.png


Text Generation Inference

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

参数及使用方法可参考这里。

性能如下:

c40cc9be547ceea8b143e868ab7a5476.png

可以看出,更新后的 TGI 性能优于 vllm。

db3e048e4752ab99ddafcea238c414e0.png

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 相关测试进行中。。。

outside_default.png

参考资料

outside_default.png

[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

更多阅读

14f6bc4f2b1fed5a5eaf225a5261dc80.png

b0a440d9eca750df6fde4976ca384201.png

bee7da6893851fd5a17b76385daf5bb8.png

0a8397469bf2f16983206d769b89a5fa.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

f2fc89c381ae67ba39d5a6c5d213b766.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

30c3606032558b3850d6ae112f716238.jpeg

<think>好的,我现在需要帮用户比较不同大模型的本地部署方式。首先,我得回忆一下之前用户提到的引用内容,看看有哪些工具和方法被提到过。引用里提到了Hugging Face的Transformers、Llama.cpp、ollama、GPT4All,还有LangChain框架和Fine-tuning的相关内容。用户现在想比较这些方式,所以我要整理它们的优缺点、适用场景和硬件要求。 首先,Hugging Face的Transformers应该是一个比较基础且灵活的工具,适合开发者,但可能需要较高的硬件配置。然后Llama.cpp是专门为Llama模型优化的,支持CPU推理,可能适合资源有限的环境。ollama用户友好,适合快速部署,但可能支持的模型有限。GPT4All也是轻量级的,适合普通用户,但扩展性可能不。 接下来,我需要考虑用户可能的实际需求,比如是否需要GPU、技术背景如何、是否需要微调或者扩展功能。例如,如果用户是开发者,可能更倾向于Hugging Face或LangChain,而普通用户可能更适合ollama或GPT4All。同时,硬件资源也是一个关键因素,比如是否有GPU会影响选择。 还要注意引用中的信息,比如引用2提到LangChain开发框架和Fine-tuning,引用3提到三种工具。需要确保覆盖这些工具,并比较它们的优缺点。同时,用户可能关心部署的难易度、性能、支持的模型类型等。 最后,生成相关问题时要围绕用户可能的后续疑问,比如如何选择工具、优化性能的方法、或者具体部署步骤。确保问题能够引导用户进一步探索他们需要的解决方案。</think>### 大模型本地部署方式比较与分析 以下是常见本地部署大模型的主流工具和技术对比,结合性能、硬件要求及适用场景进行系统梳理: --- #### 1. **Hugging Face Transformers + PyTorch** - **核心特点**:开源社区主流框架,支持加载预训练模型(如Llama、BERT、GPT-2等),支持微调和自定义开发。 - **优点**: - 灵活性,可修改模型结构和训练逻辑 - 支持GPU加速(CUDA)与混合精度训练 - 提供丰富的模型库和API接口 - **缺点**: - 显存占用较高,需高性能GPU(如NVIDIA RTX 3090+) - 部署复杂度较高,需熟悉Python和深度学习框架 - **适用场景**:研究实验、模型微调或需要自定义功能的开发者[^2][^3] --- #### 2. **Llama.cpp** - **核心特点**:专为Meta Llama系列优化的C++推理框架,支持CPU/GPU混合计算。 - **优点**: - 量化技术显著降低显存占用(如4-bit量化) - 无需GPU即可在普通PC运行 - 提供Python绑定简化调用 - **缺点**: - 仅支持Llama架构模型 - 微调能力有限 - **适用场景**:资源受限环境下的快速部署(如个人电脑)[^3] --- #### 3. **ollama** - **核心特点**:一键式本地大模型运行工具,内置模型仓库。 - **优点**: - 开箱即用,支持命令行交互 - 自动处理模型下载与依赖项 - 支持多操作系统(Windows/macOS/Linux) - **缺点**: - 仅支持部分开源模型(如Llama 2、Mistral) - 可定制性较低 - **适用场景**:非技术用户快速体验大模型能力[^3] --- #### 4. **GPT4All** - **核心特点**:轻量化本地部署方案,专注隐私保护。 - **优点**: - 完全离线运行,数据不出本地 - 图形界面友好 - 支持文档问答等垂直场景 - **缺点**: - 模型选择有限(仅自带7B/13B模型) - 推理速度较慢 - **适用场景**:企业敏感数据场景下的基础应用[^3] --- ### 关键维度对比表 | 工具/框架 | 硬件需求 | 学习成本 | 可扩展性 | 典型延迟(7B模型) | |------------------|-------------------|----------|----------|--------------------| | Hugging Face | 高端GPU(16G+显存)| 高 | ★★★★☆ | 20ms/token | | Llama.cpp | CPU/中端GPU | 中 | ★★☆☆☆ | 50ms/token | | ollama | 普通CPU | 低 | ★☆☆☆☆ | 100ms/token | | GPT4All | 普通CPU | 低 | ★★☆☆☆ | 150ms/token | --- ### 部署选型建议 1. **优先考虑硬件条件**: - 有专业显卡:选择Hugging Face进行全功能开发 - 仅有CPU:使用Llama.cpp或ollama 2. **按使用目标选择**: - 学术研究:Hugging Face + LangChain开发框架[^2] - 商业应用:结合量化技术与RAG(检索增生成)优化性能 - 隐私敏感场景:GPT4All本地化方案 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值