ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

GPU服务器安装MilvusDB手记

GPU服务器安装MilvusDB手记 目录背景操作步骤回顾说明1、关于安装方式选择2、准备镜像方面的物料2-1、下载镜像物料2-2、将成功下载后的镜像输出到文件2-3、在测试服务器上准备docker与docker-compose环境2-4、将准备好的物料上传到测试服务器并使用docker-compose命令启动相关容器3、对于GPU环境的思考后返工3-1、重新下载docker-compose.yml文件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-2-3、其他的前置操作3-2-4、安装本地仓库包3-2-5、清理旧缓存加载本地repo3-2-6、重启与验证3-3、解决nvidia-smi报错NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is install的问题3-3-1、这个报错的原因其实不太好解释之后又补充了1个命令3-3-2、验证命令nvidia-smi3-4、nvidia-container-toolkit工具的适配Docker安装3-4-1、在可以联网机器上准备好相关的.rpm包3-4-2、将上述的.rpm包都上传到测试服务器上做本地安装与验证3-4-3、自动配置 nvidia 运行时3-4-4、重启Docker3-4-5、确认目前测试机器中的Docker镜像的情况3-4-6、启动容器3-4-7、验证查看容器的运行情况3-4-8、再次验证nvidia-smi命令4、修改配置时的踩坑记录小结背景最近在项目中有学习使用向量数据库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个主要镜像在可联网的机器上做一下下载拉取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的测试服务器并不存在联网的条件所以需要提前准备好相关的离线物料用于上传和使用。# 输出镜像到文件 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.tar2-3、在测试服务器上准备docker与docker-compose环境具体操作步骤可以参考离线安装docker与docker-compose手记-CSDN博客2-4、将准备好的物料上传到测试服务器并使用docker-compose命令启动相关容器导入相关docker镜像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# .env 文件内容 DOCKER_VOLUME_DIRECTORY/data/milvus_db启动相关的容器: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文件内容如下version: 3.5 services: etcd: container_name: milvus-etcd image: quay.io/coreos/etcd:v3.5.25 environment: - ETCD_AUTO_COMPACTION_MODErevision - ETCD_AUTO_COMPACTION_RETENTION1000 - ETCD_QUOTA_BACKEND_BYTES4294967296 - ETCD_SNAPSHOT_COUNT50000 volumes: - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd command: etcd -advertise-client-urlshttp://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: milvusdocker 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的问题目前测试机器的基本性能参数如下[rootlocalhost ~]# 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) [rootlocalhost 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 [rootlocalhost yum.repos.d]# uname -r 4.19.90-89.11.v2401.ky10.x86_64 [rootlocalhost 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包下载 NVIDIA 官方驱动 | NVIDIA3-2-1、将nvidia-driver-local-repo-kylin10-550.163.01-1.0-1.x86_64.rpm包上传到测试服务器3-2-2、执行前置准备工作安装编译套件、内核开发包用来编译NVIDIA内核模块yum install -y gcc gcc-c make kernel-devel-$(uname -r) kernel-headers-$(uname -r) libglvnd-devel3-2-3、其他的前置操作echo -e blacklist nouveau\noptions nouveau modeset0 /etc/modprobe.d/blacklist-nouveau.conf dracut -f /boot/initramfs-$(uname -r).img $(uname -r) # 重启 reboot # 执行此命令后确认无任何输出 lsmod | grep nouveau3-2-4、安装本地仓库包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、清理旧缓存加载本地repoyum clean all yum makecache # 安装DKMS版数据中心驱动Tesla T4推荐自动带nvidia-smi yum -y module install nvidia-driver:latest-dkms3-2-6、重启与验证reboot # 预期会输出 4 张 Tesla T4 显卡信息则代表显卡驱动安装完成。 nvidia-smi特别备注此处又出现了1个新的报错NVIDIA-SMI has failed because it couldnt 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 couldnt communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is install的问题3-3-1、这个报错的原因其实不太好解释之后又补充了1个命令yum -y install nvidia-driver3-3-2、验证命令nvidia-smi[rootlocalhost ~]# 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包yum install -y nvidia-container-toolkit nvidia-container-runtime3-4-2、将上述的.rpm包都上传到测试服务器上做本地安装与验证yum localinstall -y *.rpm # 验证 which nvidia-container-runtime nvidia-ctk --version3-4-3、自动配置 nvidia 运行时# 自动配置 nvidia 运行时 nvidia-ctk runtime configure --runtimedocker 该命令会自动写入 /etc/docker/daemon.json生成内容大致如下 { runtimes: { nvidia: { path: nvidia-container-runtime, runtimeArgs: [] } } }3-4-4、重启Docker# 重启 Docker 服务 systemctl restart docker # 验证docker状态 systemctl status docker3-4-5、确认目前测试机器中的Docker镜像的情况[rootlocalhost 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 179MB3-4-6、启动容器# 启动运行容器后台运行 docker-compose up -d3-4-7、验证查看容器的运行情况[rootlocalhost 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/tcpSTATUS均显示healthy说明容器均被成功启动了。3-4-8、再次验证nvidia-smi命令[rootlocalhost ~]# 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显卡的计算分析能力。4、修改配置时的踩坑记录由于安装完成后需要初始化部分新账号角色有个登录账号验证的配置项需要做一下开启我看了下操作说明如下一开始我以为将对应需要部的内容新建到milvus.yaml文件中即可然后将修改后的配置文件映射进入容器内即可满足需要。但是当我在往milvus.yaml文件中写入以下内容并且也相应修改了docker-compose.yml文件后milvus-standalone容器始终就无法被重启成功了。后来我排查了很久才了解到这样采用局部新建的方式会大量遗漏其他需要的许多配置项内容的默认值。正确的做法是优先从容器内将原始的配置文件milvus.yaml拷贝出来做局部修改后再重新做一下数据卷的映射即可。拷贝命令docker cp milvus-standalone:/milvus/configs/milvus.yaml ./milvus.yaml直接找到并修改对应的节点值为true后再重启对应容器即可使得配置修改生效。小结此次在GPU显卡环境中安装milvusdb可谓是一波多折了。从安装方式的选择各个软件的版本确定可联网测试机器的模拟创建到后面首次安装了没有用到GPU计算能力的版本的milvus再到返工过程中莫名导致系统损毁需要重装操作系统。。。。。。包括至今都不知道nvidia-smi命令究竟是怎么就从command not found状态到可以正常工作了。这其中实在是有太多需要继续去总结学习了解的地方了。我也希望将整个过程分享给到大家让大家少踩坑之余有更多信心和勇气面对陌生的技术领域。
返回列表