NVIDIA的 Cosmos-Embed1-448p 终于在 DGX Spark 上部署成功
NVIDIA的 Cosmos-Embed1-448p 终于在 DGX Spark 上部署成功
容器镜像: nvcr.io/nvidia/vss-core/vss-rt-embed:3.1.0
目标平台: NVIDIA DGX Spark(GB10,aarch64)
Embed模型路径: /home/admin/models/modelscope/Cosmos-Embed1-448p
bert模型路径: /home/admin/models/modelscope/bert-base-uncased
Cosmos-Embed1 的 QFormer 初始化依赖 bert-base-uncased,必须提前下载到本地。
**显存占用:**大概15-20GB,但是在加载的时候会占用30GB左右
前置条件
- DGX Spark 已完成初始设置,
nvidia-smi可正常输出 - Docker 已安装并可在无 sudo 下运行
- 已获取 NGC API Key(从 https://ngc.nvidia.com/setup/api-key 获取)
- 模型文件已下载到宿主机(可以直接从modelscope下载好:nv-community/Cosmos-Embed1-448p,google-bert/bert-base-uncased)
- 容器镜像:
nvcr.io/nvidia/vss-core/vss-rt-embed:3.1.0
第一步:配置 NGC API Key
export NGC_API_KEY="你的NGC_API_KEY"
# 登录 NVIDIA 容器仓库
echo "$NGC_API_KEY" | docker login nvcr.io \
--username '$oauthtoken' --password-stdin
第二步:拉镜像vss-rt-embed:3.1.0
拉这个镜像(关键)
1️⃣ 登录 NGC
docker login nvcr.io
用户名:$oauthtoken
密码:你的 NGC API Key
2️⃣ 拉镜像
docker pull nvcr.io/nvidia/vss-core/vss-rt-embed:3.1.0
❌ 不存在这些地方:
Docker Hub ❌
阿里云镜像 ❌
华为云镜像 ❌
GitHub Container Registry ❌
🟢 唯一来源:
👉 NVIDIA NGC 官方仓库
第三步:添加 NVIDIA Jetson 软件源并安装 VPI
vss-rt-embed 容器依赖 libnvvpi3,需通过 Jetson 软件源安装。
# 添加 Jetson 软件源
curl -fsSL https://repo.download.nvidia.com/jetson/jetson-ota-public.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-jetson.gpg
echo "deb [signed-by=/usr/share/keyrings/nvidia-jetson.gpg] \
https://repo.download.nvidia.com/jetson/common r36.4 main" | \
sudo tee /etc/apt/sources.list.d/nvidia-jetson.list
sudo apt-get update
# 安装 VPI
sudo apt-get install -y libnvvpi3 vpi3-dev
第四步:安装 DeepStream 7.1
下载并安装 DeepStream(需先有 VPI,否则依赖报错):
# 下载 DeepStream 7.1 ARM 版本
wget -O deepstream.deb \
"https://api.ngc.nvidia.com/v2/resources/nvidia/deepstream/versions/7.1/files/deepstream-7.1_7.1.0-1_arm64.deb"
sudo apt-get install -y ./deepstream.deb
验证安装:
ls /opt/nvidia/deepstream/deepstream-7.1/lib/libnvbufsurface.so
# 预期输出:/opt/nvidia/deepstream/deepstream-7.1/lib/libnvbufsurface.so
第五步:从容器提取 DeepStream 库文件
DGX Spark 上 DeepStream 库缺少版本号后缀,需从容器内提取真实文件:
mkdir -p /home/admin/deepstream-libs
# 创建临时容器
docker create --name tmp-ds nvcr.io/nvidia/vss-core/vss-rt-embed:3.1.0
# 提取库文件
docker cp tmp-ds:/opt/nvidia/rtvi/lib/libnvbufsurface.so.1.0.0 /home/admin/deepstream-libs/
docker cp tmp-ds:/opt/nvidia/rtvi/lib/libnvbufsurface.so /home/admin/deepstream-libs/
docker cp tmp-ds:/opt/nvidia/rtvi/lib/libnvbufsurftransform.so.1.0.0 /home/admin/deepstream-libs/
docker cp tmp-ds:/opt/nvidia/rtvi/lib/libnvbufsurftransform.so /home/admin/deepstream-libs/
docker cp tmp-ds:/usr/local/lib/python3.12/dist-packages/nvidia/nvshmem/lib/libnvshmem_host.so.3 /home/admin/deepstream-libs/
docker cp tmp-ds:/usr/local/lib/python3.12/dist-packages/pyds.so /home/admin/deepstream-libs/
# 清理临时容器
docker rm tmp-ds
# 验证
ls -la /home/admin/deepstream-libs/
将库文件安装到宿主机系统路径:
sudo cp /home/admin/deepstream-libs/libnvbufsurface.so /usr/lib/aarch64-linux-gnu/
sudo cp /home/admin/deepstream-libs/libnvbufsurface.so.1.0.0 /usr/lib/aarch64-linux-gnu/
sudo cp /home/admin/deepstream-libs/libnvbufsurftransform.so.1.0.0 /usr/lib/aarch64-linux-gnu/
sudo cp /home/admin/deepstream-libs/libnvshmem_host.so.3 /usr/lib/aarch64-linux-gnu/
sudo cp /home/admin/deepstream-libs/pyds.so \
/usr/local/lib/python3.12/dist-packages/
# 添加 DeepStream lib 目录到系统库路径
echo "/opt/nvidia/deepstream/deepstream-7.1/lib" | \
sudo tee /etc/ld.so.conf.d/deepstream.conf
sudo ldconfig
第六步:准备 TRT 引擎缓存目录
首次启动时容器会编译 TRT 引擎(约 5 分钟),挂载持久化目录可避免重复编译:
mkdir -p /home/admin/models/triton_cache
sudo chmod -R 777 /home/admin/models/triton_cache
第七步:启动容器
docker run -d \
--runtime=nvidia \
--name=cosmos-embed1 \
--gpus device=0 \
-p 8909:8000 \
--shm-size=16g \
-e NGC_API_KEY=$NGC_API_KEY \
-e IS_SBSA=1 \
-e TRANSFORMERS_OFFLINE=1 \
-e HF_HUB_OFFLINE=1 \
-e HF_HOME=/tmp/huggingface \
-e MODEL_PATH=/models/Cosmos-Embed1-448p \
-e MODEL_IMPLEMENTATION_PATH=/opt/nvidia/rtvi/rtvi/models/custom/samples/cosmos-embed1 \
-e MODEL_REPOSITORY_SCRIPT_PATH=/opt/nvidia/rtvi/rtvi/models/custom/samples/cosmos-embed1/create_triton_model_repo.py \
-e RTVI_EXTRA_ARGS="--disable-decoding" \
-v /home/admin/models/modelscope/Cosmos-Embed1-448p:/models/Cosmos-Embed1-448p \
-v /home/admin/models/modelscope/bert-base-uncased:/tmp/huggingface/hub/models--bert-base-uncased/snapshots/main \
-v /home/admin/models/triton_cache:/tmp/triton_model_repo \
-v /home/admin/deepstream-libs/libnvbufsurface.so.1.0.0:/usr/lib/aarch64-linux-gnu/libnvbufsurface.so.1.0.0:ro \
-v /home/admin/deepstream-libs/libnvbufsurface.so:/usr/lib/aarch64-linux-gnu/libnvbufsurface.so:ro \
-v /home/admin/deepstream-libs/libnvbufsurftransform.so.1.0.0:/usr/lib/aarch64-linux-gnu/libnvbufsurftransform.so.1.0.0:ro \
-v /home/admin/deepstream-libs/pyds.so:/usr/local/lib/python3.12/dist-packages/pyds.so:ro \
nvcr.io/nvidia/vss-core/vss-rt-embed:3.1.0
关键环境变量说明
| 变量 | 值 | 说明 |
|---|---|---|
IS_SBSA |
1 |
告知容器当前为 SBSA/ARM 架构,加载正确的 libnvrm 库路径 |
TRANSFORMERS_OFFLINE |
1 |
禁止 transformers 联网,使用本地模型 |
HF_HUB_OFFLINE |
1 |
禁止 HuggingFace Hub 联网 |
HF_HOME |
/tmp/huggingface |
HF 缓存目录,bert-base-uncased 挂载于此 |
RTVI_EXTRA_ARGS |
--disable-decoding |
禁用 DecoderProcess(依赖 Jetson 专属库),DGX Spark 必须设置 |
第八步:验证服务
等待日志出现以下内容表示启动成功:
✅ TRITON server started successfully
✅ Cosmos Embed model initialization completed
INFO: Application startup complete.
***********************************************************
RTVI Server loaded
Backend is running at http://0.0.0.0:8000
***********************************************************
在另一个终端发送测试请求:
# 健康检查
curl http://localhost:8909/v1/ready
# 文本嵌入测试
curl -X POST http://localhost:8909/v1/generate_text_embeddings \
-H "Content-Type: application/json" \
-d '{
"text_input": ["a person riding a bicycle on a road"],
"model": "cosmos-embed1-448p"
}'
成功响应示例:
{
"id": "89817126-4508-44cc-bdd3-a044f9220a20",
"created": 1777345467,
"model": "cosmos-embed1-448p",
"data": [{
"text_input": "a person riding a bicycle on a road",
"embeddings": [-0.00106048583984375, 0.0102005004882813, ...., -0.07623291015625]
}
]
}
后续启动(第二次及以后)
第一步到第六步只需执行一次。后续启动直接执行第七步,TRT 引擎已缓存,启动时间从 5 分钟缩短到约 30 秒。
故障排查
| 错误信息 | 原因 | 解决方法 |
|---|---|---|
libnvbufsurface.so: cannot open shared object file |
DeepStream 库缺失或未挂载 | 确认第五步库文件挂载参数 -v 正确 |
OSError: We couldn't connect to huggingface.co |
bert-base-uncased 未找到 | 确认 bert 目录挂载到 /tmp/huggingface/hub/models--bert-base-uncased/snapshots/main |
libnvrm_mem.so: cannot open shared object file |
IS_SBSA 未设置 | 添加 -e IS_SBSA=1 |
PermissionError: /tmp/triton_model_repo |
triton_cache 目录权限不足 | 执行 sudo chmod -R 777 /home/admin/models/triton_cache |
ImportError: libnvshmem_host.so.3 |
LD_LIBRARY_PATH 问题 | 确认 libnvshmem_host.so.3 已复制到 /usr/lib/aarch64-linux-gnu/ |
Failed to load Decoder on GPU 0 |
DecoderProcess 初始化失败 | 添加 -e RTVI_EXTRA_ARGS="--disable-decoding" |
注意事项
--disable-decoding会禁用实时视频流解码功能(依赖 Jetson 专属 DeepStream 库libnvrm_mem.so,在 DGX Spark GB10 上不可用)。文本嵌入和离线视频文件嵌入功能不受影响。- TRT 引擎编译与 GPU 型号绑定,生成的引擎文件名含
NVIDIA_GB10,不可跨硬件复用。 - 每次容器重启会重新生成 ONNX 文件,但如挂载了
triton_cache目录且引擎文件存在,则跳过 TRT 编译(约节省 5 分钟)。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)