资讯动态

【向量数据库 Milvus】龙芯架构下源码编译与部署 Milvus 2.5.3 实战指南

发布时间:2026/9/11 23:43:24 来源:尧图企业网站定制
1. 龙芯架构下的Milvus编译挑战第一次在龙芯LoongArch架构的CentOS 8上折腾Milvus 2.5.3源码编译时我对着报错信息发了半小时呆。和常见的x86环境不同这个国产CPU架构需要特别注意三个关键点指令集兼容性、第三方库适配和编译器优化策略。去年在给某金融机构做私有化部署时就遇到过Faiss库在龙芯平台段错误的问题后来发现是SIMD指令集需要特殊处理。龙芯的LA464核心采用自主设计的LoongArch指令集与Milvus默认适配的x86_64有显著差异。实测发现最棘手的依赖项是这些Faiss向量相似度计算的核心库需要开启LOONGARCH_SIMD宏KnowhereMilvus的向量执行引擎依赖定制化的BLAS实现RocksDB存储引擎需要禁用CRC32硬件加速etcdGo语言组件需重新交叉编译建议在开始前准备至少20GB空闲磁盘空间完整编译过程会产生约15GB中间文件。我习惯在/opt目录下建立专门的工作区sudo mkdir /opt/milvus_compile sudo chown $(whoami):$(whoami) /opt/milvus_compile cd /opt/milvus_compile2. 深度依赖项处理实战2.1 编译器环境调优龙芯官方推荐的GCC版本往往比社区版本更稳定。最近在龙芯3A5000上测试时使用gcc-8.3.0会出现奇怪的模板实例化错误换成龙芯定制版gcc-10.2.0后问题消失。安装方法如下sudo dnf install -y loongnix-release sudo dnf install -y gcc-loongarch64-linux-gnu g-loongarch64-linux-gnu关键配置参数需要写入环境变量export CC/opt/gcc-loongarch64-linux-gnu/bin/gcc export CXX/opt/gcc-loongarch64-linux-gnu/bin/g export ARCH_FLAGS-marchloongarch64 -mabilp64d2.2 手动编译OpenBLAS官方源的OpenBLAS在龙芯上性能损失严重实测向量查询速度只有x86的60%。推荐从源码编译并开启LoongArch优化git clone https://github.com/loongarch64/openblas.git cd openblas make TARGETLOONGARCH64 DYNAMIC_ARCH0 USE_OPENMP1 sudo make PREFIX/usr/local install编译完成后需要更新动态库缓存echo /usr/local/lib64 | sudo tee /etc/ld.so.conf.d/openblas.conf sudo ldconfig3. 源码编译的魔鬼细节3.1 CMake配置技巧在milvus/CMakeLists.txt中需要添加这些关键修改# 在project()声明后添加 if(CMAKE_SYSTEM_PROCESSOR MATCHES loongarch64) add_definitions(-DLOONGARCH_SIMD) set(FAISS_ENABLE_GPU OFF CACHE BOOL Disable GPU for LoongArch) set(BUILD_TESTING OFF CACHE BOOL Disable tests) endif()第三方库的编译需要单独处理比如修改milvus/thirdparty/CMakeLists.txt# 在knowhere部分前插入 ExternalProject_Add(faiss_loongarch URL https://github.com/loongarch64/faiss/archive/refs/tags/v1.7.3-loongarch64.tar.gz CMAKE_ARGS -DFAISS_ENABLE_GPUOFF -DBUILD_TESTINGOFF )3.2 内存管理优化龙芯平台的NUMA架构需要特别配置在configs/milvus.yaml中增加queryNode: cacheEnabled: true cacheMemoryLimit: 4096 # MB numaEnabled: true numaNodeID: 0大内存机器建议调整jemalloc配置export MALLOC_CONFbackground_thread:true,metadata_thp:auto,dirty_decay_ms:300004. 性能调优实战记录4.1 向量索引对比测试在龙芯3C5000L服务器上测试不同索引类型的QPS表现索引类型构建时间(s)10k向量查询QPS内存占用(G)FLAT015201.2IVF_FLAT4228602.8HNSW21839404.5ANNOY8717503.1测试命令示例./bin/milvus_benchmark \ --collection_nameloongarch_test \ --dim256 \ --index_typeHNSW \ --run_count100004.2 内核参数调优编辑/etc/sysctl.conf添加vm.swappiness 10 vm.dirty_ratio 20 vm.dirty_background_ratio 5 net.core.somaxconn 32768针对向量查询的高并发场景需要调整线程池配置queryNode: gracefulTime: 5000 maxConcurrent: 32 schedulerInterval: 1005. 排错指南与社区资源上周帮客户部署时遇到一个典型问题启动时报错illegal instruction。这是典型的指令集不兼容问题解决方法分三步检查CPU微码版本cat /proc/cpuinfo | grep -i loongarch确认编译时的march参数包含正确的扩展指令grep -r march build/CMakeCache.txt重新编译问题模块通常是knowherecd build/knowhere make clean make -j$(nproc)推荐的问题追踪渠道龙芯官方社区的软件适配板块Milvus GitHub的loongarch64标签issues中国开源社区的LoongArch特别兴趣小组遇到依赖地狱时可以尝试我整理的预编译包仓库sudo tee /etc/yum.repos.d/loongarch-extras.repo EOF [loongarch-extras] nameLoongArch Extra Packages baseurlhttps://mirrors.loongarch.org/loongarch-extras/ enabled1 gpgcheck0 EOF

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价