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 分钟)。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐