在NVIDIA Jetson平台离线部署大模型,开启离线具身智能新纪元。
本项目提供一种将LMDeploy移植到NVIDIA Jetson系列边缘计算卡的方法,并在Jetson计算卡上运行InternLM系列大模型,为离线具身智能提供可能。
最新新闻🎉
- [2024/3/15] 更新了对LMDeploy-v0.2.5。
- [2024/2/26] 本项目被LMDeploy官方社区收录。
已验证模型/平台
- ✅:已验证可运行
- ❌:已验证不可运行
- ⭕️:待验证
Models | InternLM-7B | InternLM-20B | InternLM2-1.8B | InternLM2-7B | InternLM2-20B |
---|---|---|---|---|---|
Orin AGX(32G) Jetpack 5.1 | ✅ Mem:??/?? 14.68 token/s | ✅ Mem:??/?? 5.82 token/s | ✅ Mem:??/?? 56.57 token/s | ✅ Mem:??/?? 14.56 token/s | ✅ Mem:??/?? 6.16 token/s |
Orin NX(16G) Jetpack 5.1 | ✅ Mem:8.6G/16G 7.39 token/s | ✅ Mem:14.7G/16G 3.08 token/s | ✅ Mem:5.6G/16G 22.96 token/s | ✅ Mem:9.2G/16G 7.48 token/s | ✅ Mem:14.8G/16G 3.19 token/s |
Xavier NX(8G) Jetpack 5.1 | ❌ | ❌ | ✅ Mem:4.35G/8G 28.36 token/s | ❌ | ❌ |
未来工作
- 更新更多型号Jetson板卡的Benchmark测试数据
- 制作Jetson专用whl发行版
- 跟进更新版本的LMDeploy
部署教程
Jetson端离线运行InternLM大模型
创建模型保存目录:
mkdir -p ~/models
将S1.服务器端模型W4A16量化得到的internlm-chat-7b-turbomind.tgz
上传到models
目录下。
解压模型文件:
tar zxvf internlm-chat-7b-turbomind.tgz -C .
0.Bug解决:修改MMEngine库
Jetson端的pytorch不支持分布式的reduce算子,这会导致MMEngine库中与分布式有关的部分出现错误。
错误为:
AttributeError: module 'torch.distributed' has no attribute 'ReduceOp'
激活conda环境:
conda activate lmdeploy
用解释器方式运行python:
python
输入如下内容:
import mmengine
print(mmengine.__file__)
这就输出了MMEngine库的安装位置,笔者的是/home/nvidia/miniconda3/envs/lmdeploy/lib/python3.8/site-packages/mmengine/__init__.py
,那么相应位置就是home/nvidia/miniconda3/envs/lmdeploy/lib/python3.8/site-packages/mmengine/
,咱们用<path/to/mmengine>
代替。
修改<path/to/mmengine>/logging/logger.py
第208行:
- global_rank = _get_rank()
+ global_rank = 0
在运行就不会报错了。
注意:该方式过于粗暴,仅适用于Jetson平台部署推理,在服务器端会影响分布式功能!
1.终端运行
激活conda环境:
conda activate lmdeploy
运行模型:
lmdeploy chat turbomind ./internlm-chat-7b-turbomind
2.Python集成运行
编写运行脚本run_model.py
,内容如下:
from lmdeploy import turbomind as tm
if __name__ == "__main__":
model_path = "./internlm-chat-7b-turbomind" # 修改成你的路径
tm_model = tm.TurboMind.from_pretrained(model_path)
generator = tm_model.create_instance()
while True:
inp = input("[User] >>> ")
if inp == "exit":
break
prompt = tm_model.model.get_prompt(inp)
input_ids = tm_model.tokenizer.encode(prompt)
for outputs in generator.stream_infer(session_id=0, input_ids=[input_ids]):
res = outputs[1]
response = tm_model.tokenizer.decode(res)
print("[Bot] <<< {}".format(response))
激活conda环境:
conda activate lmdeploy
运行脚本:
python run_model.py
附录
- 为Jetson重装Jetpack
- LMDeploy-Jetson基准测试
引用
如果本项目对您的工作有所帮助,请使用以下格式引用:
@misc{2024lmdeployjetson,
title={LMDeploy-Jetson:Opening a new era of Offline Embodied Intelligence},
author={LMDeploy-Jetson Community},
url={https://github.com/BestAnHongjun/LMDeploy-Jetson},
year={2024}
}
致谢
- 书生·浦语大模型实战营
- 上海人工智能实验室
- trt-llm