Jetson orin部署大模型示例教程

本文介绍了如何在NVIDIAJetson设备上部署和使用大型语言模型(LLM)如text-generation-webui、MiniGPT-4和Stable-Diffusion,以及视觉Transformer(ViT)的应用,包括配置容器镜像、运行Web服务器和解决遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、LLM介绍

LLM指的是Large Language Model(大型语言模型),是一类基于深度学习的自然语言处理技术,其主要目的是让机器能够更好地理解和生成人类的自然语言文本,如文章、对话、搜索等。

教程 - text-generation-webui

通过在 NVIDIA Jetson 上使用 oobabooga 的 text-generaton-webui 运行 LLM 与本地 AI 助手进行交互!

所需条件:

  1. 以下 Jetson 之一:

    Jetson AGX Orin 64GB Jetson AGX Orin (32GB) Jetson Orin Nano Orin (8GB)⚠️1

  2. 运行以下 JetPack.5x 之一

    JetPack 5.1.2 (L4T, r35.4.1) JetPack 5.1.1 (L4T r35.3.1) JetPack 5.1 (L4T r35.2.1

  3. 足够的存储空间(最好使用 NVMe SSD)。

    • 6.2GB对于容器映像
    • 模型空间

使用 和 script 自动拉取或构建兼容的容器映像:run.shautotag

cd jetson-containers
./run.sh $(./autotag text-generation-webui)

容器有一个默认的运行命令 (),它将自动启动 Web 服务器,如下所示:CMD

cd /opt/text-generation-webui && python3 server.py \
  --model-dir=/data/models/text-generation-webui \
  --chat \
  --listen

打开浏览器并访问 .http://<IP_ADDRESS>:7860

在 Web UI 上下载模型

有关下载模型的说明,请参阅 oobabooga 文档 - 从 Web UI 中或使用 download-model.py

./run.sh --workdir=/opt/text-generation-webui $(./autotag text-generation-webui) /bin/bash -c \
  'python3 download-model.py --output=/data/models/text-generation-webui TheBloke/Llama-2-7b-Chat-GPTQ'

GGUF 型号

目前使用最快的 oobabooga 模型加载器是具有 4 位量化 GGUF 模型的 llama.cpp

您可以下载特定量化的单个模型文件,例如 .输入文件名并点击下载按钮。*.Q4_K_M.bin

量化内存 (MB)
TheBloke/Llama-2-7b-Chat-GGUFllama-2-7b-chat.Q4_K_M.gguf5,268
TheBloke/Llama-2-13B-chat-GGUFllama-2-13b-chat.Q4_K_M.gguf8,609
TheBloke/LLaMA-30b-GGUFllama-30b.Q4_K_S.gguf19,045
TheBloke/Llama-2-70B-chat-GGUFllama-2-70b-chat.Q4_K_M.gguf37,655

 这里模型对内存的消耗较大,如果是orin nano选第一个7B大小模型,根据手里的硬件设备进行挑选下载,模型越大对内存要求越高。

测试结果如下

二、文本 + 视觉 (VLM)

教程 - MiniGPT-4

通过在 Jetson 上运行 MiniGPT-4,让您本地运行的 LLM 获得视觉访问权限!

设置容器MiniGPT-4

有关更多信息,请参阅 jetson-containers 的 minigpt4 软件包 README**

克隆和设置jetson-containers

git clone https://github.com/dusty-nv/jetson-containers
cd jetson-containers
sudo apt update; sudo apt install -y python3-pip
pip3 install -r requirements.txt

使用模型启动容器minigpt4

要使用推荐的型号启动 MiniGPT4 容器和 Web 服务器,请运行以下命令:

cd jetson-containers
./run.sh $(./autotag minigpt4) /bin/bash -c 'cd /opt/minigpt4.cpp/minigpt4 && python3 webui.py \
  $(huggingface-downloader --type=dataset maknee/minigpt4-13b-ggml/minigpt4-13B-f16.bin) \
  $(huggingface-downloader --type=dataset maknee/ggml-vicuna-v0-quantized/ggml-vicuna-13B-v0-q5_k.bin)'

然后,打开您的网络浏览器并访问 .http://<IP_ADDRESS>:7860

结果

遇到问题:

/usr/local/lib/python3.8/dist-packages/gradio/layouts/column.py:55: UserWarning: 'scale' value should be an integer. Using 0.5 will cause issues.
  warnings.warn(
Traceback (most recent call last):
  File "webui.py", line 129, in <module>
    start(share_link)
  File "webui.py", line 87, in start
    submit = gr.Button(value="Send message", variant="secondary").style(full_width=True)
AttributeError: 'Button' object has no attribute 'style'

本地运行镜像 docker run --runtime nvidia -it --rm --network host e9a43bf72f83

python3 webui.py   $(huggingface-downloader --type=dataset maknee/minigpt4-13b-ggml/minigpt4-13B-f16.bin)   $(huggingface-downloader --type=dataset makne e/ggml-vicuna-v0-quantized/ggml-vicuna-13B-v0-q5_k.bin)

即可,原因是gradio版本为3.50.2以后成功运行(默认自带4.0.2) 

三、图像生成 Stable-Diffusion

教程 - 稳定扩散

让我们在 NVIDIA Jetson 上运行 AUTOMATIC1111 的 stable-diffusion-webui 来根据我们的提示生成图像!

如何开始

如果您是第一次运行它,请完成预设置并查看 jetson-containers/stable-diffusion-webui 自述文件。

使用 和 script 自动拉取或构建兼容的容器映像:run.shautotag

cd jetson-containers
./run.sh $(./autotag stable-diffusion-webui)

容器有一个默认的运行命令 (),它将自动启动 Web 服务器,如下所示:CMD

cd /opt/stable-diffusion-webui && python3 launch.py \
  --data=/data/models/stable-diffusion \
  --enable-insecure-extension-access \
  --xformers \
  --listen \
  --port=7860

您应该看到它在第一次运行时下载模型检查点。

打开浏览器并访问http://<IP_ADDRESS>:7860

四、视觉Vision Transformers (ViT)

### Jetson Orin上YOLOv8的部署与优化 #### 一、准备工作 为了在Jetson Orin设备上成功部署并优化YOLOv8模型,需先完成一系列准备活动。这包括但不限于安装必要的依赖库以及设置适合的工作环境。 对于Jetson系列开发板而言,在开始任何深度学习框架的应用之前,确保CUDA、cuDNN版本兼容是非常重要的[^1]。此外,建议通过Anaconda来管理Python包及其运行时环境,这样可以有效减少不同项目间可能存在的冲突问题。 #### 二、转换模型权重文件 当目标是在边缘计算平台上高效执行神经网络推断任务时,通常会将原始训练好的PyTorch(.pt)格式权重量化或转成其他更适合硬件加速器处理的形式。针对本案例中的YOLOv8模型来说,可以通过编写脚本来提取参数,并将其保存为特定于TensorRT使用的权重文件(wts),以便后续加载到INT8/FP16精度下的引擎中去。 ```bash python gen_wts.py -w yolov8.pt -o yolov8.wts ``` 上述命令假设`gen_wts.py`是一个自定义工具,用于读取`.pt`格式的预训练模型并将其中的张量序列化至`.wts`文本文件内[^2]。 #### 三、构建TensorRT推理引擎 一旦拥有了适配后的权重数据,下一步就是基于这些信息创建高效的推理引擎实例。这里推荐采用官方提供的trtexec工具来进行快速验证: ```bash trtexec --onnx=yolov8.onnx --saveEngine=yolov8.trt --workspace=4096 --fp16 ``` 此过程涉及到了ONNX作为中间表示形式,因此如果原生支持导出的话可以直接跳过前一步骤;否则就需要额外借助torch.onnx.export()函数辅助完成了。注意这里的选项可以根据实际需求调整,比如是否开启半精度浮点运算(`--fp16`)或是指定更大的工作空间大小以容纳更复杂的层结构(`--workspace`)等。 #### 四、集成C++ API实现高性能调用 最后也是最关键的一环——如何让应用程序能够充分利用已编译好得TRT Engine?答案就在于利用NVIDIA所提供的C++接口APIs。下面给出了一段简单的代码片段展示怎样初始化Session对象进而发起预测请求: ```cpp #include "NvInfer.h" // ...省略部分头文件引入... int main(){ // 创建Logger实例... // 反序列化先前生成的engine文件 std::ifstream file("yolov8.trt", std::ios::binary); nvinfer1::IRuntime* runtime = nvinfer1::createInferRuntime(gLogger); assert(runtime != nullptr); nvinfer1::ICudaEngine* engine; if (file.good()){ size_t size{0}; char * trtModelStream{nullptr}; file.seekg(0, file.end); size = file.tellg(); file.seekg(0, file.beg); trtModelStream = new char[size]; assert(trtModelStream); file.read(trtModelStream, size); file.close(); engine = runtime->deserializeCudaEngine(trtModelStream, size, nullptr); delete[] trtModelStream; }else{ gLogError << "Unable to open model file." << endl; return -1; } // 构建ExecutionContext并绑定输入输出缓冲区... } ``` 以上即是从零开始直至最终能够在Jetson Orin平台之上流畅运行经过高度定制化的YOLOv8检测算法的大致流程概述。
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无证驾驶梁嗖嗖

让我们解决Jetson使用问题

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值