目录
2-3、在测试服务器上准备docker与docker-compose环境
2-4、将准备好的物料上传到测试服务器并使用docker-compose命令启动相关容器
[3-2、解决nvidia-smi报错:command not found的问题](#3-2、解决nvidia-smi报错:command not found的问题)
3-2-1、将nvidia-driver-local-repo-kylin10-550.163.01-1.0-1.x86_64.rpm包上传到测试服务器
3-2-2、执行前置准备工作,安装编译套件、内核开发包,用来编译NVIDIA内核模块
[3-3、解决nvidia-smi报错:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is install的问题](#3-3、解决nvidia-smi报错:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is install的问题)
3-3-1、这个报错的原因其实不太好解释,之后又补充了1个命令
3-4、nvidia-container-toolkit工具的适配Docker安装
3-4-2、将上述的.rpm包都上传到测试服务器上,做本地安装与验证
[3-4-3、自动配置 nvidia 运行时](#3-4-3、自动配置 nvidia 运行时)
背景
最近在项目中,有学习使用向量数据库Milvus的需要。所以,学习研究了一下怎么安装单机版本的MilvusDB。在此,也希望把一些遇到的踩坑问题,做一下笔记记录,便于后续回顾。
主要参考的文献:https://milvus.io/docs/zh
测试服务器操作系统: Kylin Linux Advanced Server V10 (Halberd)
安装的版本说明:v2.6.12-GPU
联网情况说明:无法直接连接外网,有公司内部基础功能组件的yum源
操作步骤回顾说明
1、关于安装方式选择
一开始考虑使用比较简单一些的:Docker(Linux)方式 ,最后,验证下来有缺少组件的问题,无法成功完成安装。从而,之后,真正选择的方案是Docker Compose(Linux)方式。


2、准备镜像方面的物料
2-1、下载镜像物料
https://github.com/milvus-io/milvus/releases/download/v2.6.12/milvus-standalone-docker-compose.yml
阅读docker-compose.yml(将下载得到的milvus-standalone-docker-compose.yml更名为docker-compose.yml,最后经过验证证明这个milvus版本其实还是使用了CPU的能力)文件内容

确认需要3个主要镜像:
使用docker镜像的拉取命令,将3个主要镜像在可联网的机器上做一下下载拉取:
bash
docker pull quay.io/coreos/etcd:v3.5.25
docker pull minio/minio:RELEASE.2024-12-18T13-15-44Z
docker pull milvusdb/milvus:v2.6.12
**备注:**此处需要配置国内镜像源或者可以直接访问外部网络,否则,下载过程将会非常缓慢甚至超时中断。
2-2、将成功下载后的镜像输出到文件
由于最终需要部署milvusdb的测试服务器并不存在联网的条件,所以,需要提前准备好相关的离线物料用于上传和使用。
bash
# 输出镜像到文件
docker save -o etcd.tar quay.io/coreos/etcd:v3.5.25
docker save -o minio.tar minio/minio:RELEASE.2024-12-18T13-15-44Z
docker save -o milvusdb.tar milvusdb/milvus:v2.6.12
# 做一下压缩处理,便于文件传送
tar -zcvf etcd.tar.gz etcd.tar
tar -zcvf minio.tar.gz minio.tar
tar -zcvf milvusdb.tar.gz milvusdb.tar
2-3、在测试服务器上准备docker与docker-compose环境
具体操作步骤可以参考:离线安装docker与docker-compose手记-CSDN博客
2-4、将准备好的物料上传到测试服务器并使用docker-compose命令启动相关容器
导入相关docker镜像:
bash
docker load -i etcd.tar
docker load -i minio.tar
docker load -i milvusdb.tar
并将docker-compose.yml文件放入指定的项目文件夹下,我这边选择的项目文件夹路径是:
/root/project/milvus_db
可选操作,在该目录下再新建一个.env文件,用于管理环境变量:DOCKER_VOLUME_DIRECTORY
bash
# .env 文件内容
DOCKER_VOLUME_DIRECTORY=/data/milvus_db
启动相关的容器:
bash
docker-compose up -d
验证容器的运行效果:

3、对于GPU环境的思考后返工
根据以上步骤,milvus似乎是被成功安装成功,也正常运行了。但是,为啥感觉没有怎么体现GPU显卡的性能的设置呢?这个问题,则成了很困扰我的一个问题点。于是乎,我再次搜索相关Docker容器获取宿主机GPU资源的文章以及milvus官网对于这段内容的描述。

我发现之前安装的Milvus其实本身还是借助CPU的计算能力,并没有使用到GPU的计算能力。
于是,便开始了调整返工之旅。
3-1、重新下载docker-compose.yml文件
Releases · milvus-io/milvus · GitHub
找到v2.6.12版本后,进行选取和下载

修改需要拉取的milvus镜像
完整的带-gup结尾的.yml文件内容如下:
bash
version: '3.5'
services:
etcd:
container_name: milvus-etcd
image: quay.io/coreos/etcd:v3.5.25
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_AUTO_COMPACTION_RETENTION=1000
- ETCD_QUOTA_BACKEND_BYTES=4294967296
- ETCD_SNAPSHOT_COUNT=50000
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
healthcheck:
test: ["CMD", "etcdctl", "endpoint", "health"]
interval: 30s
timeout: 20s
retries: 3
minio:
container_name: milvus-minio
image: minio/minio:RELEASE.2024-12-18T13-15-44Z
environment:
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
ports:
- "9001:9001"
- "9000:9000"
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
command: minio server /minio_data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
standalone:
container_name: milvus-standalone
image: milvusdb/milvus:v2.6.12-gpu
command: ["milvus", "run", "standalone"]
security_opt:
- seccomp:unconfined
environment:
ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: minio:9000
MQ_TYPE: woodpecker
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
interval: 30s
start_period: 60s
timeout: 20s
retries: 3
ports:
- "19530:19530"
- "9091:9091"
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities: ["gpu"]
device_ids: ["0"]
depends_on:
- "etcd"
- "minio"
networks:
default:
name: milvus

bash
docker pull milvusdb/milvus:v2.6.12-gpu
再次将相关更新后的镜像和docker-compose.yml文件都上传到测试服务器,并启动容器。这次,
对应容器就启动失败了。失败的原因是,宿主机的GPU显卡驱动未安装,且docker的GPU运行时(nvidia-container-toolkit工具)也未配置,则docker容器无法使用到宿主机的GPU计算能力。
3-2、解决nvidia-smi报错:command not found的问题
目前,测试机器的基本性能参数如下:
bash
[root@localhost ~]# lspci | grep -i nvidia
36:00.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)
37:00.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)
9d:00.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)
9e:00.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)
[root@localhost yum.repos.d]# uname -a
Linux localhost.localdomain 4.19.90-89.11.v2401.ky10.x86_64 #1 SMP Tue May 7 18:33:01 CST 2024 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost yum.repos.d]# uname -r
4.19.90-89.11.v2401.ky10.x86_64
[root@localhost yum.repos.d]# hostnamectl
Static hostname: localhost.localdomain
Icon name: computer-server
Chassis: server
Machine ID: ##################################
Boot ID: ##################################
Operating System: Kylin Linux Advanced Server V10 (Halberd)
Kernel: Linux 4.19.90-89.11.v2401.ky10.x86_64
Architecture: x86-64
前往NVIDIA驱动官网查询并下载需要适配测试环境机器的显卡驱动.rpm包



3-2-1、将nvidia-driver-local-repo-kylin10-550.163.01-1.0-1.x86_64.rpm包上传到测试服务器
3-2-2、执行前置准备工作,安装编译套件、内核开发包,用来编译NVIDIA内核模块
bash
yum install -y gcc gcc-c++ make kernel-devel-$(uname -r) kernel-headers-$(uname -r) libglvnd-devel
3-2-3、其他的前置操作
bash
echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/blacklist-nouveau.conf
dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
# 重启
reboot
# 执行此命令后确认无任何输出
lsmod | grep nouveau
3-2-4、安装本地仓库包
bash
rpm -ivh /root/nvidia-driver-local-repo-kylin10-550.163.01-1.0-1.x86_64.rpm
作用:
在 /etc/yum.repos.d/ 生成本地 nvidia 源文件;
导入 NVIDIA 官方 GPG 校验密钥;
后续 yum 会从这个本地 rpm 仓库读取驱动安装包。
3-2-5、清理旧缓存,加载本地repo
bash
yum clean all && yum makecache
# 安装DKMS版数据中心驱动(Tesla T4推荐,自动带nvidia-smi)
yum -y module install nvidia-driver:latest-dkms
3-2-6、重启与验证
bash
reboot
# 预期会输出 4 张 Tesla T4 显卡信息,则代表显卡驱动安装完成。
nvidia-smi
**特别备注:**此处又出现了1个新的报错:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is install
其实,在一开始为了解决nvidia-smi出现"command not found"问题时候,不知道因为哪步的命令执行还曾经导致过系统基础命令完全失效的场景,不得不重装系统来解决,所以,这块还是让人感觉问题挺多的。
3-3、解决nvidia-smi报错:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is install的问题
3-3-1、这个报错的原因其实不太好解释,之后又补充了1个命令
bash
yum -y install nvidia-driver
3-3-2、验证命令nvidia-smi
bash
[root@localhost ~]# nvidia-smi
Fri Jun 26 17:06:07 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.163.01 Driver Version: 550.163.01 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 Tesla T4 Off | 00000000:36:00.0 Off | 0 |
| N/A 56C P0 31W / 70W | 1MiB / 15360MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 Tesla T4 Off | 00000000:37:00.0 Off | 0 |
| N/A 52C P0 30W / 70W | 1MiB / 15360MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 2 Tesla T4 Off | 00000000:9D:00.0 Off | 0 |
| N/A 52C P0 29W / 70W | 1MiB / 15360MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 3 Tesla T4 Off | 00000000:9E:00.0 Off | 0 |
| N/A 53C P0 30W / 70W | 1MiB / 15360MiB | 7% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
这次就可以确实看到4块显卡的基础信息了。
3-4、nvidia-container-toolkit工具的适配Docker安装
3-4-1、在可以联网机器上准备好相关的.rpm包
bash
yum install -y nvidia-container-toolkit nvidia-container-runtime

3-4-2、将上述的.rpm包都上传到测试服务器上,做本地安装与验证
bash
yum localinstall -y *.rpm
# 验证
which nvidia-container-runtime
nvidia-ctk --version
3-4-3、自动配置 nvidia 运行时
bash
# 自动配置 nvidia 运行时
nvidia-ctk runtime configure --runtime=docker
该命令会自动写入 /etc/docker/daemon.json,生成内容大致如下:
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
3-4-4、重启Docker
bash
# 重启 Docker 服务
systemctl restart docker
# 验证docker状态
systemctl status docker
3-4-5、确认目前测试机器中的Docker镜像的情况
bash
[root@localhost milvus_db]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
milvusdb/milvus v2.6.12-gpu a6eb81204bf4 3 months ago 6.33GB
quay.io/coreos/etcd v3.5.25 ce1ffcaa22b9 7 months ago 64.7MB
minio/minio RELEASE.2024-12-18T13-15-44Z 6aed1b694901 18 months ago 179MB
3-4-6、启动容器
bash
# 启动运行容器,后台运行
docker-compose up -d
3-4-7、验证查看容器的运行情况
bash
[root@localhost milvus_db]# docker-compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
milvus-etcd quay.io/coreos/etcd:v3.5.25 "etcd -advertise-cli..." etcd 20 hours ago Up 20 hours (healthy) 2379-2380/tcp
milvus-minio minio/minio:RELEASE.2024-12-18T13-15-44Z "/usr/bin/docker-ent..." minio 20 hours ago Up 20 hours (healthy) 0.0.0.0:9000-9001->9000-9001/tcp, :::9000-9001->9000-9001/tcp
milvus-standalone milvusdb/milvus:v2.6.12-gpu "/tini -- milvus run..." standalone 20 hours ago Up 20 hours (healthy) 0.0.0.0:9091->9091/tcp, :::9091->9091/tcp, 0.0.0.0:19530->19530/tcp, :::19530->19530/tcp
STATUS均显示"healthy",说明:容器均被成功启动了。
3-4-8、再次验证nvidia-smi命令
bash
[root@localhost ~]# nvidia-smi
Tue Jun 30 17:32:31 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.163.01 Driver Version: 550.163.01 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 Tesla T4 Off | 00000000:36:00.0 Off | 0 |
| N/A 48C P0 29W / 70W | 1127MiB / 15360MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 1 Tesla T4 Off | 00000000:37:00.0 Off | 0 |
| N/A 41C P0 29W / 70W | 1MiB / 15360MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 2 Tesla T4 Off | 00000000:9D:00.0 Off | 0 |
| N/A 40C P0 28W / 70W | 1MiB / 15360MiB | 8% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
| 3 Tesla T4 Off | 00000000:9E:00.0 Off | 0 |
| N/A 41C P0 29W / 70W | 1MiB / 15360MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 857843 C milvus 1124MiB |
+-----------------------------------------------------------------------------------------+
备注:可以看到此时Processes 栏出现了0号显卡被进程milvus 使用的信息。初步验证说明创建的milvus数据库使用到了GPU显卡的计算分析能力。
小结
此次在GPU显卡环境中安装milvusdb可谓是一波多折了。从安装方式的选择,各个软件的版本确定,可联网测试机器的模拟创建,到后面首次安装了没有用到GPU计算能力的版本的milvus,再到返工过程中莫名导致系统损毁需要重装操作系统。。。。。。包括至今都不知道"nvidia-smi"命令究竟是怎么就从"command not found"状态到可以正常工作了。这其中,实在是有太多需要继续去总结,学习了解的地方了。我也希望将整个过程分享给到大家,让大家少踩坑之余,有更多信心和勇气面对陌生的技术领域。
