看到这个报错先别急,这个问题通常是由于你拉取的 Milvus 镜像版本与系统的 NVIDIA 驱动,或是与 NVIDIA Container Toolkit 版本不兼容导致的。
这是一个软硬件版本匹配的问题。我们可以通过以下三步,重新配置一个能正确调用 GPU 的 Milvus 环境。
1. 🕵️ 诊断分析:理解错误信息的根源
- 错误信息 :
libcudart.so.12: cannot open shared object file
这个错误说明 Milvus 容器内部找不到libcudart.so.12这个文件,它是 CUDA 12.x 运行时库的一部分。 - 您的测试结果 :
sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:12.6.0-base-ubuntu24.04 nvidia-smi命令成功执行。
这证明您的系统底层已经具备了运行 GPU 容器的能力。然而,您当前使用的 Milvus 镜像可能是在一个没有预装该运行时库的基础镜像上构建的。Milvus 官方不同版本的 GPU 镜像,依赖于特定版本的 CUDA 运行时库,这与您系统的驱动版本可能不匹配。
2. 🛠️ 解决方案概览
要解决这个问题,最稳妥的方法是为您的 Milvus 显式配置 GPU 支持。这通常需要准备一个专用的 docker-compose.yml 文件,并进行正确的配置,以确保容器能获得所需的库支持。
3. 📝 详细配置步骤
我们将通过以下步骤来配置一个正确的 GPU Milvus 环境。
第一步:准备 GPU 专用的 Compose 文件
Milvus 官方提供了专门为 GPU 准备的 Docker Compose 配置文件。
-
进入您计划存放 Milvus 配置文件的目录。
-
下载官方为 GPU 准备的配置文件。您可以根据使用的 Milvus 版本,从以下几个文档链接中获取相应的
docker-compose.yml:- 最新版 : Milvus 2.6.15 GPU 配置参考
- 历史版本 : Milvus 2.6.14 GPU 配置参考
您可以使用
wget命令下载,例如:bash# 以 2.6.15 版本为例,请根据您的需要选择版本 wget https://github.com/milvus-io/milvus/releases/download/v2.6.15/milvus-standalone-docker-compose-gpu.yml -O docker-compose.yml
第二步:配置 Compose 文件以分配 GPU
下载完成后,需要在 docker-compose.yml 文件中配置 Milvus 服务可以访问哪些 GPU 设备。
-
使用
vim或nano等编辑器打开docker-compose.yml文件。 -
找到
standalone服务定义下的deploy.resources.reservations.devices部分。 -
在
device_ids字段中,指定您要分配的 GPU ID。您可以使用nvidia-smi命令查看 GPU 的 ID。yamlstandalone: # ... 其他配置 ... deploy: resources: reservations: devices: - driver: nvidia capabilities: ["gpu"] device_ids: ["0"] # 将 "0" 替换为您实际的 GPU ID如果您有多个 GPU 且希望 Milvus 都能使用,可以写成
device_ids: ["0", "1"]。
第三步:启动 Milvus 服务
完成配置文件的修改后,使用以下命令启动所有服务:
bash
sudo docker compose up -d
这条命令会后台启动 Milvus、etcd 和 MinIO 三个核心容器。
4. ✅ 验证启动
服务启动后,可以通过以下两个命令来检查运行状态:
- 检查容器状态 :运行
sudo docker compose ps,确保milvus-standalone的状态为Up。 - 检查服务日志 :运行
sudo docker logs milvus-standalone,确认最新的日志中没有再次出现libcudart.so.12或类似的 GPU 相关错误。
💡 补充说明:如果仍有问题怎么办?
- 彻底清理环境 :在重新部署之前,建议先彻底清理旧的环境。停止并删除旧的容器和镜像(
sudo docker compose down --rmi all或sudo docker stop ...),以避免版本冲突。 - 检查 NVIDIA Container Toolkit:如果配置后仍无法正常工作,可以重新安装 NVIDIA Container Toolkit。这是让 Docker 容器能够调用宿主机 NVIDIA 驱动和 GPU 的关键工具,确保它已正确安装和配置。
- 使用 CPU 版本临时替代:如果您暂时不需要 GPU 加速,可以先改用 CPU 版本的 Milvus 来验证其他功能是否正常。
- 查阅官方完整指南:上述操作步骤基于 Milvus 官方文档,您也可以直接查阅以获取更详细的说明。
配置完成后,您可以先运行 docker compose logs milvus-standalone 看看是否还有报错。如果一切正常,就可以继续其他的向量检索工作了~