这个错误信息 libcudart.so.12: cannot open shared object file: No such file or directory 明确指向了问题的核心:Milvus 容器内部缺少所需的 CUDA 12 运行时库

这通常意味着 Docker 的 GPU 运行时(即 nvidia-container-toolkit)可能没有正确安装或配置,导致容器无法访问宿主机的 CUDA 库。

🔧 修复步骤

为了避免因权限混乱导致问题,请从第一步开始,严格按顺序执行。

第一步:清理旧容器
在开始修复前,我们先把之前可能出现问题的容器和镜像彻底移除,确保在一个干净的环境里重新开始。

# 停止并删除所有相关的容器和网络
sudo docker compose down -v
# 删除旧的、可能不兼容的 Milvus GPU 镜像
sudo docker rmi milvusdb/milvus:latest-gpu

第二步:重装 NVIDIA Container Toolkit
根据你的描述,nvidia-container-toolkit 很可能没有正确安装。请按照以下标准步骤进行安装和配置。

# 1. 配置稳定版仓库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# 2. 安装 toolkit
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# 3. 配置 Docker 运行时
sudo nvidia-ctk runtime configure --runtime=docker

# 4. 重启 Docker 服务
sudo systemctl restart docker

第三步:验证 GPU 可访问性
安装完成后,必须验证 Docker 能否正常访问 GPU。这是确保 Milvus 成功启动的关键一步。

sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:12.6.0-base-ubuntu24.04 nvidia-smi
  • 如果命令成功执行并显示了你的 GPU 信息(如驱动版本、CUDA 版本等),说明 Docker 的 GPU 环境已正确配置。
  • 如果命令失败,请暂停,仔细检查第二步的操作。

第四步:重新部署 Milvus GPU 版
确保一切正常后,我们就可以重新部署 GPU 版的 Milvus 了。

# 1. 下载最新的 GPU 版配置文件
wget https://github.com/milvus-io/milvus/releases/download/v2.6.17/milvus-standalone-docker-compose-gpu.yml -O docker-compose.yml

# 2. 可选:明确指定 GPU 设备
#    如果你的机器有多张 GPU,可以编辑 docker-compose.yml 文件,找到 standalone 服务,修改 device_ids: ["0"] 来指定使用第一张卡。

# 3. 启动服务
sudo docker compose up -d

# 4. 检查容器状态 (所有服务都应是 'Up' 状态)
sudo docker compose ps

第五步:最终验证
部署完成后,我们来验证 Milvus 是否真的用上了 GPU。

# 1. 查看 Milvus 日志,查找 GPU 相关的成功信息
sudo docker logs milvus-standalone 2>&1 | grep -i "gpu\|cuda"

# 2. 在宿主机上使用 nvidia-smi 查看 GPU 进程
nvidia-smi

如果在 nvidia-smi 的输出中看到了 milvus 进程,或者在日志里看到了 GPU is enabled 类似的信息,就说明你的 GPU 版 Milvus 已经成功运行了。


⚠️ 注意事项:版本兼容性

Milvus 的不同版本可能基于不同的 CUDA 版本构建。如果你使用的是较旧的 GPU 版 Milvus 镜像(如 v2.3.x 系列),它可能需要的是 libcudart.so.11 而不是 libcudart.so.12。建议使用最新的 Milvus 镜像版本。

Logo

CANN开发者社区旨在汇聚广大开发者,围绕CANN架构重构、算子开发、部署应用优化等核心方向,展开深度交流与思想碰撞,携手共同促进CANN开放生态突破!

更多推荐