1. 为什么要在LoongArch架构上部署Milvus最近几年国产芯片发展迅猛龙芯推出的LoongArch架构就是典型代表。作为一名长期在国产化环境工作的技术老兵我发现在这个架构上部署AI基础设施时总会遇到各种坑。就拿向量数据库Milvus来说官方主要支持x86和ARM架构在LoongArch上直接安装二进制包基本行不通。但现实需求很明确很多政企客户的数据中心都在推进国产化替代而AI应用又离不开向量数据库。上周我刚完成一个金融客户的项目就是在龙芯3A5000服务器上部署Milvus集群。实测下来虽然编译过程比较折腾但最终性能表现完全满足他们的智能投研系统需求。2. 环境准备与依赖处理2.1 系统基础环境配置我建议使用干净的CentOS 8系统作为起点龙芯官方提供的龙蜥(Anolis)OS也可以。先做个全面更新sudo dnf update -y sudo dnf install -y epel-release基础编译工具链必不可少这里有个细节要注意gcc版本必须≥7.5但不要用太新的我实测gcc10会有兼容性问题sudo dnf install -y git make cmake gcc-7.5 gcc-c-7.52.2 特殊依赖处理LoongArch架构最麻烦的就是一些加速库的适配。比如OpenBLAS需要手动指定优化参数sudo dnf install -y openblas-devel export OPENBLAS_CORETYPELOONGARCH64Python环境建议用miniconda管理避免系统Python的版本冲突wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-loongarch64.sh bash Miniconda3-latest-Linux-loongarch64.sh conda create -n milvus python3.83. 源码编译实战3.1 获取与准备源码推荐从官方仓库拉取指定版本注意要用--recursive参数拉取子模块git clone --recursive https://github.com/milvus-io/milvus.git -b v2.5.3 cd milvus关键步骤来了需要手动修改几处CMake配置编辑CMakeLists.txt在project()语句后添加set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -marchloongarch64)修改thirdparty/faiss/CMakeLists.txt找到SIMD相关代码段注释掉LoongArch不支持的指令集。3.2 编译优化技巧编译时建议这样启动可以显著加快速度8核机器示例make -j8 milvus如果遇到奇怪的链接错误试试先单独编译依赖项cd internal/core make knowhere -j8我遇到过最棘手的问题是protobuf版本冲突解决方法是用conda安装指定版本conda install -c conda-forge protobuf3.204. 配置与调优4.1 关键配置修改复制配置文件后这几个参数需要特别注意storage: path: /mnt/milvus/data # 建议挂载高性能SSD queryNode: gpu: enabled: false # LoongArch目前不支持CUDA内存分配也很重要在milvus.yaml中添加common: memQuotaMB: 8192 # 根据实际内存调整4.2 启动参数优化建议用nohup后台运行并限制内存使用ulimit -n 65536 nohup ./bin/milvus run milvus.log 21 监控日志特别重要可以用这个命令实时查看tail -f milvus.log | grep -E WARN|ERROR5. 验证与性能测试5.1 基础功能验证用curl测试服务状态curl -X GET http://localhost:19530/versionPython客户端测试脚本示例from pymilvus import connections connections.connect(default, hostlocalhost, port19530) print(connections.get_connection())5.2 性能调优建议在LoongArch架构上我建议将knowhere.use_blas_threshold设为1024小规模查询用BLAS更高效索引类型优先选择IVF_FLAT实测比HNSW性能更好批量插入时设置insert_buffer_size256单位MB6. 常见问题解决方案Q编译时报错undefined reference to __atomic_load_8A这是工具链问题解决方法export CFLAGS-latomic export CXXFLAGS-latomicQ运行时出现GLIBCXX版本错误A手动指定库路径export LD_LIBRARY_PATH/usr/local/lib64:$LD_LIBRARY_PATHQ查询时出现Segmentation faultA很可能是SIMD指令问题在knowhere配置中关闭AVXknowhere: simd_type: none7. 生产环境部署建议对于企业级部署我有几个实用建议使用systemd管理服务参考这个unit文件[Unit] DescriptionMilvus service Afternetwork.target [Service] Usermilvus Groupmilvus WorkingDirectory/opt/milvus ExecStart/opt/milvus/bin/milvus run Restartalways [Install] WantedBymulti-user.target数据目录建议用LVM管理方便后期扩容日志统一收集到ELK或类似系统监控推荐使用PrometheusGranfa方案整个部署过程最耗时的是源码编译环节在龙芯3C5000服务器上完整编译大约需要2小时。建议先在测试环境完整跑通全流程再在生产环境操作。遇到问题时多关注社区动态LoongArch的生态正在快速完善中。
【向量数据库 Milvus】LoongArch架构下源码编译与部署实战
1. 为什么要在LoongArch架构上部署Milvus最近几年国产芯片发展迅猛龙芯推出的LoongArch架构就是典型代表。作为一名长期在国产化环境工作的技术老兵我发现在这个架构上部署AI基础设施时总会遇到各种坑。就拿向量数据库Milvus来说官方主要支持x86和ARM架构在LoongArch上直接安装二进制包基本行不通。但现实需求很明确很多政企客户的数据中心都在推进国产化替代而AI应用又离不开向量数据库。上周我刚完成一个金融客户的项目就是在龙芯3A5000服务器上部署Milvus集群。实测下来虽然编译过程比较折腾但最终性能表现完全满足他们的智能投研系统需求。2. 环境准备与依赖处理2.1 系统基础环境配置我建议使用干净的CentOS 8系统作为起点龙芯官方提供的龙蜥(Anolis)OS也可以。先做个全面更新sudo dnf update -y sudo dnf install -y epel-release基础编译工具链必不可少这里有个细节要注意gcc版本必须≥7.5但不要用太新的我实测gcc10会有兼容性问题sudo dnf install -y git make cmake gcc-7.5 gcc-c-7.52.2 特殊依赖处理LoongArch架构最麻烦的就是一些加速库的适配。比如OpenBLAS需要手动指定优化参数sudo dnf install -y openblas-devel export OPENBLAS_CORETYPELOONGARCH64Python环境建议用miniconda管理避免系统Python的版本冲突wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-loongarch64.sh bash Miniconda3-latest-Linux-loongarch64.sh conda create -n milvus python3.83. 源码编译实战3.1 获取与准备源码推荐从官方仓库拉取指定版本注意要用--recursive参数拉取子模块git clone --recursive https://github.com/milvus-io/milvus.git -b v2.5.3 cd milvus关键步骤来了需要手动修改几处CMake配置编辑CMakeLists.txt在project()语句后添加set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -marchloongarch64)修改thirdparty/faiss/CMakeLists.txt找到SIMD相关代码段注释掉LoongArch不支持的指令集。3.2 编译优化技巧编译时建议这样启动可以显著加快速度8核机器示例make -j8 milvus如果遇到奇怪的链接错误试试先单独编译依赖项cd internal/core make knowhere -j8我遇到过最棘手的问题是protobuf版本冲突解决方法是用conda安装指定版本conda install -c conda-forge protobuf3.204. 配置与调优4.1 关键配置修改复制配置文件后这几个参数需要特别注意storage: path: /mnt/milvus/data # 建议挂载高性能SSD queryNode: gpu: enabled: false # LoongArch目前不支持CUDA内存分配也很重要在milvus.yaml中添加common: memQuotaMB: 8192 # 根据实际内存调整4.2 启动参数优化建议用nohup后台运行并限制内存使用ulimit -n 65536 nohup ./bin/milvus run milvus.log 21 监控日志特别重要可以用这个命令实时查看tail -f milvus.log | grep -E WARN|ERROR5. 验证与性能测试5.1 基础功能验证用curl测试服务状态curl -X GET http://localhost:19530/versionPython客户端测试脚本示例from pymilvus import connections connections.connect(default, hostlocalhost, port19530) print(connections.get_connection())5.2 性能调优建议在LoongArch架构上我建议将knowhere.use_blas_threshold设为1024小规模查询用BLAS更高效索引类型优先选择IVF_FLAT实测比HNSW性能更好批量插入时设置insert_buffer_size256单位MB6. 常见问题解决方案Q编译时报错undefined reference to __atomic_load_8A这是工具链问题解决方法export CFLAGS-latomic export CXXFLAGS-latomicQ运行时出现GLIBCXX版本错误A手动指定库路径export LD_LIBRARY_PATH/usr/local/lib64:$LD_LIBRARY_PATHQ查询时出现Segmentation faultA很可能是SIMD指令问题在knowhere配置中关闭AVXknowhere: simd_type: none7. 生产环境部署建议对于企业级部署我有几个实用建议使用systemd管理服务参考这个unit文件[Unit] DescriptionMilvus service Afternetwork.target [Service] Usermilvus Groupmilvus WorkingDirectory/opt/milvus ExecStart/opt/milvus/bin/milvus run Restartalways [Install] WantedBymulti-user.target数据目录建议用LVM管理方便后期扩容日志统一收集到ELK或类似系统监控推荐使用PrometheusGranfa方案整个部署过程最耗时的是源码编译环节在龙芯3C5000服务器上完整编译大约需要2小时。建议先在测试环境完整跑通全流程再在生产环境操作。遇到问题时多关注社区动态LoongArch的生态正在快速完善中。