ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

如何构建支持 GPU 的 Qdrant Docker 镜像?TARGET_CPU 与 GPU 构建参数怎么选?

如何构建支持 GPU 的 Qdrant Docker 镜像?TARGET_CPU 与 GPU 构建参数怎么选? 如何构建支持 GPU 的 Qdrant Docker 镜像TARGET_CPU 与 GPU 构建参数怎么选【免费下载链接】qdrantQdrant - High-performance, massive-scale Vector Database and Vector Search Engine for the next generation of AI. Also available in the cloud https://cloud.qdrant.io/项目地址: https://gitcode.com/GitHub_Trending/qd/qdrant如果你需要从源码构建一个带 GPU 加速索引能力的 Qdrant 镜像核心就是给docker build传对两个构建参数GPU取nvidia或amd决定镜像是否启用 GPU 支持、基于哪个运行时基础镜像TARGET_CPU决定 Rust 编译时针对哪类 CPU 优化。本文依据仓库内的 docs/DEVELOPMENT.md 和 Dockerfile 说明完整的构建、配置与验证路径。准备条件在 Qdrant 源码仓库根目录下操作构建命令是docker build .上下文就是仓库根目录本地有可用的 Docker 环境。不启用任何额外参数时默认构建命令为docker build . --tagqdrant/qdrantGPU 参数决定基础镜像和编译 featureGPU构建参数在 Dockerfile 中有两处作用选择最终镜像的基础镜像。Dockerfile 为三种情况各定义了一个阶段不设置GPU基于debian:13-slim阶段名qdrant-cpuGPUnvidia基于nvidia/opengl:1.2-glvnd-devel-ubuntu22.04设置NVIDIA_DRIVER_CAPABILITIEScompute,graphics,utility并把lib/gpu/nvidia_icd.json拷入容器内的/etc/vulkan/icd.d/Vulkan ICD loader 文件GPUamd基于rocm/dev-ubuntu-22.04。给编译过程追加--featuresgpu。Dockerfile 中的编译命令是xx-cargo ... ${GPU:--featuresgpu}即只有GPU非空时才会启用该 feature。根目录 Cargo.toml 中这个 feature 展开为gpu [gpu/gpu, segment/gpu]对应 lib/gpu 里基于 Vulkan 的ash、gpu-allocator、shaderc依赖。启用 GPU 时最终镜像阶段还会额外安装libvulkan1、libvulkan-dev、vulkan-tools三个包。docs/DEVELOPMENT.md 给出的完整示例同时指定TARGET_CPU和GPUdocker build . --tagqdrant/qdrant \ --build-arg TARGET_CPUnative --build-arg GPUamd如果你的主机是 NVIDIA GPU把GPUamd换成GPUnvidia即可其余不变。TARGET_CPU 参数决定-C target-cpu编译选项TARGET_CPU会被拼进编译用的RUSTFLAGS。Dockerfile 中的相关行# Select target CPU; use rustc --print target-cpus to see available values ARG TARGET_CPU ... RUSTFLAGS${LINKER:-C link-arg-fuse-ld}$LINKER ${TARGET_CPU:-C target-cpu}$TARGET_CPU $RUSTFLAGS选择方式用rustc --print target-cpus查看当前工具链支持的目标 CPU 列表从中选值文档示例用native不传该参数时${TARGET_CPU:...}展开为空等价于不添加-C target-cpu按 rustc 默认行为编译。Dockerfile 中有一条注释值得注意传给docker build的ARG值不同会使后续层缓存失效因为后续步骤依赖这个ARG的值所以TARGET_CPU和GPU这类影响编译的参数一旦改变构建会重新执行编译步骤而不是复用缓存层。除这两个参数外docs/DEVELOPMENT.md 还列出了其他可用的构建参数FEATURES-- 定义 cargo featuresRUSTFLAGS-- 定义rustc编译标志LINKER-- 定义RUSTFLAGS中使用的链接器Dockerfile 中默认值为moldJEMALLOC_SYS_WITH_LG_PAGE-- 以 2 为底的对数形式定义 jemalloc 页大小如12 4k14 16k16 64k文档说明它对某些 ARM 机器编译时有用。运行时启用 GPU 索引gpu.indexing只构建带 GPU 的镜像还不够。Qdrant 的 GPU 配置段定义在 src/settings.rs 的GpuConfig中其中的indexing字段Enable GPU indexing默认关闭。src/main.rs 里的init_gpu_devices在indexing为 false 时直接返回不初始化 GPU 设备管理器。因此在自定义配置文件中加入gpu段并按 docs/DEVELOPMENT.md 的方式挂载到/qdrant/config/production.yamlgpu: indexing: trueGpuConfig可用的字段及文档中的说明均来自 src/settings.rs 的字段注释字段说明indexing启用 GPU 索引默认关闭force_half_precision索引时将f32值强制半精度转换只发生在 GPU 内存内不影响存储类型groups_count使用的 Vulkan groups 数即 GPU 可并行索引的点数量默认 512注释明确提示除非你清楚自己在做什么否则不要改这个值device_filter按硬件名称过滤 GPU 设备不区分大小写的逗号分隔子串列表例如nvidia默认空接受所有设备devices按设备索引显式指定要使用的 GPU若同时设置了device_filter索引在过滤之后应用parallel_indexes允许并行运行的索引进程数默认 1allow_integrated允许使用集成 GPU默认 falseallow_emulated允许使用 LLVMpipe 等模拟 GPU文档注明对 CI 有用默认 false启动命令沿用 docs/DEVELOPMENT.md 给出的挂载自定义配置的方式$(pwd)/path/to/custom_config.yaml需替换为你自己包含上述gpu段的配置文件路径docker run -p 6333:6333 \ -v $(pwd)/path/to/data:/qdrant/storage \ -v $(pwd)/path/to/snapshots:/qdrant/snapshots \ -v $(pwd)/path/to/custom_config.yaml:/qdrant/config/production.yaml \ qdrant/qdrant其中/qdrant/storage是数据持久化位置文档提醒必须挂载为 volume否则容器删除时数据会丢失。验证telemetry 接口与初始化日志镜像是否编译了 GPU feature、运行时是否拿到了 GPU 设备可以从 telemetry 数据中确认。/telemetry接口src/actix/api/service_api.rs返回的数据结构包含gpubool编译时是否启用了gpufeature来自cfg!(feature gpu)gpu_devicesGPU 设备管理器中登记的设备列表仅在编译启用gpufeature 且设备管理器初始化成功时才有值见 src/common/telemetry_ops/app_telemetry.rs。启动后访问http://localhost:6333/telemetry文档说明启动后 Qdrant 可通过 localhost:6333 访问。如果设备管理器初始化失败src/main.rs 会记录错误日志Cant initialize GPU devices manager: {err}看到这个日志时说明配置已生效gpu.indexing: true但设备发现/初始化失败需要检查容器内能否看到目标 GPU 设备。注意仓库文档没有给出把宿主机 GPU 直通进容器的具体运行参数这部分需要结合你所用的 NVIDIA/AMD 容器运行时环境自行确认。两个容易踩的构建细节基础镜像的 glibc 必须匹配Dockerfile 注释说明编译阶段刻意使用 bookworm 基础镜像以匹配 GPU 运行时镜像否则会出现 libc 版本不匹配导致的运行时错误上游关联 PR #7334。如果你要修改 Dockerfile 里的编译阶段基础镜像这条注释需要一并考虑。GPU参数同时影响编译和基础镜像最终阶段通过FROM qdrant-${GPU:gpu-}${GPU:-cpu}选择基础镜像所以GPU只能是nvidia或amd之一或留空不要传入其他值否则FROM会找不到同名构建阶段。构建完成后的镜像入口是./entrypoint.shDockerfile 的CMD默认暴露 6333HTTP和 6334gRPC两个端口gpu.indexing保持关闭时该镜像与普通 CPU 镜像的行为一致GPU 相关代码不会初始化。【免费下载链接】qdrantQdrant - High-performance, massive-scale Vector Database and Vector Search Engine for the next generation of AI. Also available in the cloud https://cloud.qdrant.io/项目地址: https://gitcode.com/GitHub_Trending/qd/qdrant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表