大模型部署实战—1:NVIDIA Jetson Thor (128GB) :Ubuntu 24.04 + JetPack 7.2 搭建完整深度学习环境+部署本地大模型全记录
┌─────────────────────────────────────────┐
│ 应用层 (你写的代码) │ ← 你的 Python/C++ 程序
├─────────────────────────────────────────┤
│ 深度学习框架 (PyTorch/TF) │ ← 模型训练和推理
├─────────────────────────────────────────┤
│ CUDA / cuDNN / TensorRT (加速库) │ ← GPU 加速计算
├─────────────────────────────────────────┤
│ JetPack SDK (软件包集合) │ ← 核心:驱动 + 库 + 系统
├─────────────────────────────────────────┤
│ Ubuntu 操作系统 (Linux内核) │ ← 底层系统
├─────────────────────────────────────────┤
│ NVIDIA Jetson Thor (硬件) │ ← 你的开发板
└─────────────────────────────────────────┘
参考:1. 小白之——Jetson AGX Orin运行环境安装与部署教程:Anaconda, Jetpack,jtop,CUDA, CUDNN,pytorch,torchvision_jetson agx orin pytorch cuda cudnn-CSDN博客
一、基础环境:JetPack 与系统配置
1.1 安装 JetPack SDK
Jetson Thor 默认搭载 Ubuntu 24.04,推荐使用 JetPack 7.0+。JetPack 包含了 CUDA、cuDNN、TensorRT 等核心组件。
sudo apt update
sudo apt install nvidia-jetpack
安装完成后,验证 CUDA 是否可用:
nvcc --version
nvidia-smi
1.2 配置 CUDA 环境变量
安装后 nvcc 可能找不到,需要手动添加 PATH:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
永久生效(写入 ~/.bashrc):
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
1.3 安装监控工具 jtop(jetson-stats)
jtop 是 Jetson 设备常用的硬件监控工具。
安装方式:推荐使用 pipx 安装,避免污染系统 Python 环境。
# 安装 pipx
sudo apt install pipx
pipx ensurepath
安装 jetson-stats
pipx install jetson-stats
配置为系统服务:
# 使用绝对路径安装服务(sudo 环境下 PATH 可能不包含 ~/.local/bin)
sudo /home/zzc/.local/bin/jtop --install-service
sudo systemctl daemon-reload
sudo systemctl enable jtop.service
sudo systemctl restart jtop.service
运行:
jtop
# 若提示服务未激活,检查服务状态
sudo systemctl status jtop.service
踩坑:
sudo jtop提示找不到命令,因为sudo的 PATH 不包含用户目录。解决:使用绝对路径或修改sudo visudo的secure_path。pipx install jetson-stats installed package jetson-stats 7.2.0, installed using Python 3.12.3 These apps are now globally available - jetson_config - jetson_release - jetson_swap - jtop ⚠️ Note: '/home/zzc/.local/bin' is not on your PATH environment variable. These apps will not be globally accessible until your PATH is updated. Run `pipx ensurepath` to automatically add it, or manually modify your PATH in your shell's config file (i.e. ~/.bashrc). done! ✨ 🌟 ✨ (base) zzc@zzc:~/Downloads$ jtop bash: jtop: command not found
安装成功了,但现在系统还不知道
jtop命令在哪里,因为它被安装在了一个还没有加入系统 PATH 的目录里。错误信息已经提示得很清楚了:
/home/zzc/.local/bin不在你的 PATH 环境变量中。⚙️ 解决方法
运行
pipx推荐的命令,让它自动帮你把路径加入 PATH:bash
pipx ensurepath执行后,它会自动修改你的
~/.bashrc配置文件。请关闭当前终端,然后重新打开一个新终端,再输入jtop就可以正常工作了。另外:
在运行
sudo /home/zzc/.local/bin/jtop --install-service时,安装脚本自动生成了服务文件。但它错误地假设jtop被安装在/usr/local/bin/,而实际上pipx把它安装到了~/.local/bin/。这是jetson-stats在通过pipx安装时的一个已知小缺陷
1.4 查看 JetPack 版本
apt show nvidia-jetpack
# 或
cat /etc/nv_tegra_release
踩坑:安装完成后,我已经完全安装了sudo apt install nvidia-jetpack,但是在运行下面命令仍然出错,bash: nvcc: command not found,解决办法:
-
打开配置文件:在终端中输入以下命令,编辑你的用户配置文件
~/.bashrc:bash
nano ~/.bashrc
-
添加 Anaconda 路径:在文件的末尾添加下面这行。请注意,如果你的安装目录不是默认的
~/anaconda3,请替换成你实际的安装路径。bash
export PATH="~/anaconda3/bin:$PATH"
-
保存并退出:按
Ctrl+O,回车保存,再按Ctrl+X退出nano编辑器。 -
使配置生效:运行以下命令,让刚才的修改立即生效:
bash
source ~/.bashrc
二、Python 环境管理
2.0 anaconda环境安装
通过官网下载anaconda的arm版本,本地安装。
出现无法找到conda命令的错误,同样是环境变量问题。
2.1 Conda 替代方案(ARM 架构)
官方 Anaconda 不支持 ARM (aarch64),推荐使用 Miniforge 或 Archiconda。
# 下载 Miniforge (aarch64)
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh
chmod +x Miniforge3-Linux-aarch64.sh
./Miniforge3-Linux-aarch64.sh
# 按提示安装,默认路径 ~/miniforge3
2.2 Conda 换清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
2.3 Pip 换清华源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
2.4 区分系统 Python 与 Conda Python
-
系统 Python:
/usr/bin/python3(JetPack 依赖) -
Conda Python:
~/miniforge3/bin/python3(用户环境)
终端提示符 (base) 表示 Conda 环境已激活。使用 conda deactivate 可退出。
三、安装 Ollama 本地大模型框架
注意:事实证明,从ollama官网下载的版本对其本身的权重文件具有很好的适配型。作者从github镜像下载的版本,安装后无法兼容最新的qwen3.5/3.6系列,最后又重新利用官网进行安装ollama才解决。
ollama github地址:GitHub - ollama/ollama: Get up and running with Kimi-K2.6, GLM-5.2, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models. · GitHub
llama.cpp地址:GitHub - ggml-org/llama.cpp: LLM inference in C/C++ · GitHub
3.1 问题:官方安装脚本太慢
直接执行 curl -fsSL https://ollama.com/install.sh | sh 在国内下载极慢,且可能因网络中断失败。
3.2 解决方案:手动下载安装(ollama | newbe)
步骤1:下载 ARM64 安装包
使用国内镜像加速下载:
curl -L -o ollama-linux-arm64.tar.zst https://ghproxy.net/https://github.com/ollama/ollama/releases/download/v0.32.6/ollama-linux-arm64.tar.zst
如果
ghproxy.net不可用,可尝试ghp.ci、ghproxy.homeboyc.cn等镜像。实际均无效,我用的魔搭社区ollama | newbe手动下载到本地
步骤2:解压并安装
# 安装 zstd 解压工具
sudo apt install zstd -y
解压到 /usr 目录(注意:新版本是 .tar.zst)
sudo tar -C /usr -xvf ollama-linux-arm64.tar.zst
步骤3:创建 ollama 用户
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
步骤4:创建 systemd 服务
sudo tee /etc/systemd/system/ollama.service > /dev/null <
步骤5:验证安装
sudo systemctl status ollama
ollama --version
3.3 踩坑:ollama 命令 Permission denied
如果运行 ollama --version 提示 Permission denied,是因为 /usr/local/bin/ollama 可能是旧的无效文件。
# 删除旧文件
sudo rm -f /usr/local/bin/ollama
# 清除 shell 缓存
hash -r
# 再次运行,应使用 /usr/bin/ollama
ollama --version
3.4 迁移 ollama 到 /usr/local/bin(可选)
sudo mv /usr/bin/ollama /usr/local/bin/ollama
sudo sed -i 's|/usr/bin/ollama|/usr/local/bin/ollama|g' /etc/systemd/system/ollama.service
sudo systemctl daemon-reload
sudo systemctl restart ollama
hash -r
ollama --version
四、编译 llama-server(Ollama 核心组件)
4.1 问题:运行模型报错 llama-server not found
运行 ollama run qwen3:30b 报错:
Error: 500 Internal Server Error: llama-server binary not found
4.2 根本原因
Ollama 依赖 llama-server 组件执行模型推理,但手动安装的版本未包含该组件,需从源码编译。
4.3 解决方案:从 Ollama 源码编译(推荐)/实际我是从llama的github源码下载编译的。
步骤1:克隆 Ollama 源码(使用镜像加速)
git clone https://bgithub.xyz/ollama/ollama.git ~/ollama
cd ~/ollama
git submodule update --init --recursive
若
bgithub.xyz不可用,可换用gitclone.com或官方源。
步骤2:进入 llama.cpp 子模块编译
cd llm/llama.cpp
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DLLAMA_CUDA=ON -DLLAMA_CUDA_ARCHITECTURES=87
cmake --build . --config Release -j $(nproc)
-DLLAMA_CUDA_ARCHITECTURES=87针对 Jetson Thor (sm_87) 优化。
步骤3:安装编译产物
sudo mkdir -p /usr/local/lib/ollama
sudo cp bin/llama-server /usr/local/lib/ollama/
sudo cp bin/*.so* /usr/local/lib/
sudo ldconfig
步骤4:重启 Ollama 服务
sudo systemctl restart ollama
步骤5:测试
ollama run qwen3:30b
4.4 踩坑:libllama-common.so.0 找不到
启动时可能提示:
/usr/local/lib/ollama/llama-server: error while loading shared libraries: libllama-common.so.0: cannot open shared object file
解决:确保所有 .so 文件已复制并更新缓存:
sudo cp ~/ollama/llm/llama.cpp/build/bin/*.so* /usr/local/lib/
sudo ldconfig
4.5 踩坑:参数不兼容错误
如果使用独立 llama.cpp 仓库编译,可能遇到:
error: invalid argument: --no-log-prefix
这是因为独立仓库版本过新,参数与 Ollama 不匹配。必须使用 Ollama 源码自带的子模块版本。
4.5 踩坑:版本过旧
Error: 500 Internal Server Error: llama-server process has terminated: exit status 127
主要原因是我从一开始从gitee下载的仓库进行编译,但是gitee上的仓库比较旧,与最新的JetPack7不兼容导致的。解决方法就是下载最新的llama进行重新编译。
五、下载模型与国内镜像加速
5.1 默认源下载慢
ollama run qwen3:30b 默认从 registry.ollama.ai 下载,国内速度极慢。
5.2 使用 Hugging Face 镜像
方法1:直接指定 hf-mirror.com 地址
ollama run hf-mirror.com/模型作者/模型名:标签
例如:
ollama run hf-mirror.com/Beinsezii/Qwen3.5-122B-A10B-GGUF-HALO:latest
方法2:设置环境变量
export HF_ENDPOINT=https://hf-mirror.com
ollama run hf.co/Beinsezii/Qwen3.5-122B-A10B-GGUF-HALO:latest
5.3 手动下载 GGUF 并导入 Ollama
如果自动拉取总是中断,建议手动下载后导入。
步骤1:从 hf-mirror.com 下载 .gguf 文件
使用浏览器或 wget 下载模型文件(注意文件大小,如 122B 模型约 94GB)。
步骤2:创建 Modelfile
echo 'FROM /path/to/downloaded/model.gguf' > Modelfile
步骤3:导入 Ollama
ollama create qwen3.5:122b -f Modelfile
步骤4:运行
ollama run qwen3.5:122b
5.4 处理分片 GGUF(sharded GGUF)
如果遇到错误:
The specified tag is a sharded GGUF. Ollama does not support this yet.
说明模型被分割成多个文件,需先合并。
解决方法:使用 llama.cpp 的 llama-gguf-split 工具合并。
# 编译 llama.cpp 工具(如果尚未编译)
cd ~/llama.cpp/build
# 运行合并
./bin/llama-gguf-split --merge model-00001-of-00002.gguf merged.gguf
# 然后导入合并后的文件
echo 'FROM ./merged.gguf' > Modelfile
ollama create qwen3.5:122b -f Modelfile
六、模型选择与硬件评估
6.1 Jetson Thor 128GB 内存能跑多大的模型?
| 模型 | 量化格式 | 文件大小 | 可行性 |
|---|---|---|---|
| Qwen3.5-122B-A10B | Q4_K_M | ~75GB | ✅ 可运行(内存紧张) |
| Qwen2.5-72B | Q4_K_M | ~40GB | ✅ 流畅 |
| Qwen2.5-32B | Q4_K_M | ~20GB | ✅ 完美适配 |
| DeepSeek-V4-Flash 284B | MXFP4 | ~140GB | ❌ 超出内存 |
6.2 模型后缀含义
| 后缀 | 含义 |
|---|---|
| A10B | 激活参数 100亿(MoE 架构) |
| NVFP4 | NVIDIA 4-bit 浮点量化,为 Blackwell 架构优化 |
| MTP | Multi-Token Prediction,多令牌预测(加速推理) |
| wMix48 | 混合精度量化,目标内存 48GB(多为 MLX 格式) |
6.3 推荐模型
-
教学/日常开发:
Qwen2.5-32B(性能与资源平衡) -
追求速度:
Qwen3.5-35B-A3B(MoE,激活仅 3B) -
探索上限:
Qwen3.5-122B-A10B-NVFP4(需 ~75GB,可尝试)
七、常用命令速查
7.1 Ollama 服务管理
bash
sudo systemctl status ollama # 查看服务状态 sudo systemctl restart ollama # 重启服务 sudo journalctl -u ollama -f # 实时查看日志(按 Ctrl+C 退出) sudo journalctl -u ollama -n 100 # 查看最近 100 行日志
7.2 模型管理
bash
ollama list # 已安装模型列表 ollama ps # 当前驻留内存的模型 ollama stop <model> # 卸载模型 ollama rm <model> # 删除模型 ollama cp <src> <dst> # 重命名模型 ollama run <model> --verbose # 运行并显示性能指标
7.3 环境变量
bash
export OLLAMA_KEEP_ALIVE=600 # 模型驻留时间(秒,默认 300) export OLLAMA_MODELS=/path/to/models # 更改模型存储路径 export HF_ENDPOINT=https://hf-mirror.com # Hugging Face 镜像 export OLLAMA_NUM_GPU=0 # 强制 CPU 模式(调试用)
八、常见错误与解决方案速查
| 错误信息 | 常见原因 | 解决方案 |
|---|---|---|
bash: command not found | PATH 未包含 | 检查 ~/.local/bin 或 hash -r |
Permission denied | 文件无执行权限 | sudo chmod +x <file> |
status=203/EXEC | 可执行文件不存在 | 检查服务文件中的 ExecStart 路径 |
exit status 127 | 缺失动态库 | 复制 .so 到 /usr/local/lib 并 sudo ldconfig |
400: tag not available | 镜像未同步 | 换用官方源或其他标签 |
sharded GGUF | 模型分片 | 使用 llama-gguf-split 合并 |
invalid argument: --no-log-prefix | llama-server 版本不兼容 | 使用 Ollama 源码中的子模块编译 |
九、总结
通过本文的实践,在 Jetson Thor 上成功搭建了完整的深度学习与大模型运行环境。关键要点:
-
善用量化与 MoE 架构:128GB 内存可运行 70B~122B 的量化模型。
-
国内镜像加速是必须的:GitHub 代理、HF-Mirror、ModelScope 可大幅提升下载速度。
-
Ollama 的 llama-server 需从源码编译:务必使用 Ollama 自带的子模块版本,避免参数不兼容。
-
区分系统 Python 与 Conda 环境:用 Conda 管理项目依赖,系统 Python 保留给 JetPack 工具。
后续可探索:
-
接入 OpenClaw 构建 AI Agent
-
使用 vLLM 提升推理吞吐
-
尝试更多 MoE 模型(如 DeepSeek-V3)
本文操作环境:
-
硬件:NVIDIA Jetson Thor (128GB 统一内存)
-
系统:Ubuntu 24.04 (ARM64)
-
JetPack:7.0+
-
Ollama:0.32.6(手动安装)
踩坑记录
1. OLLAMA与大模型版本不兼容
ollama是直接从(ollama | newbe)下载的,本地解压,最新版本v0.32.6。能够运行ollama run qwen3:30b。但是直接利用ollama官方命令运行ollama run qwen3.5:122b/ollama run qwen3.6:35b,出现下面的错误:
ollama run qwen3.6:35b
pulling manifest
pulling f5ee307a2982: 100% ▕█████████████████████████████████████████████████████████████████████████████████████ ▏ 23 GB/ 23 GB 1.8 MB/s 0s
verifying sha256 digest
writing manifest
success
Error: 500 Internal Server Error: llama-server process has terminated: exit status 1: error: Failed to load CLIP model from /usr/share/ollama/.ollama/models/blobs/sha256-f5ee307a2982106a6eb82b62b2c00b575c9072145a759ae4660378acda8dcf2d
error loading model: error loading model hyperparameters: key qwen35moe.rope.dimension_sections has wrong array length; expected 4, got 3
error loading model: error loading model hyperparameters: key qwen35moe.rope.dimension_sections has wrong array length; expected 4, got 3
重新在llama的github仓库编译了最新的源码/直接运行llama命令进行加载,均依然无法解决。
最终,直接利用ollama官网的安装命令
curl -fsSL https://ollama.com/install.sh | sh
重新安装了ollama,运行qwen3.5-122B,竟然成功。主要原因还是github仓库里的ollama应该与官网的版本有区别。
更多推荐
所有评论(0)