接入 NVIDIA A100、吞吐量提高 10 倍!Milvus GPU 版本使用指南

这篇具有很好参考价值的文章主要介绍了接入 NVIDIA A100、吞吐量提高 10 倍!Milvus GPU 版本使用指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Milvus 2.3 正式支持 NVIDIA A100!

作为为数不多的支持 GPU 的向量数据库产品,Milvus 2.3 在吞吐量和低延迟方面都带来了显著的变化,尤其是与此前的 CPU 版本相比,不仅吞吐量提高了 10 倍,还能将延迟控制在极低的水准。

不过,正如我前面提到的,鲜有向量数据库支持 GPU,这其中除了有技术门槛较高的因素外,还涉及诸多不确定性的问题。那么,Milvus 为什么要做一件充满挑战的事情?

回想 Milvus 决定支持 GPU 的场景,很多细节仍旧历历在目。当时,随着 LLM 的兴起,用户对于向量数据库的性能提出了更高的要求,尤其是在一些对性能、延迟有着极高要求的场景,只通过 CPU 索引来支撑的难度越来越高,而 GPU 有着非常强大的并行处理能力。

因此,我们决定在 Milvus 2.3 版本中支持 GPU。幸运的是,来自 NVIDIA 的小伙伴给予了我们诸多支持,他们主动给我们提供了Rapid Raft GPU 索引接入 Milvus 的支持代码。在 NVIDIA 和 Milvus 团队的共同努力下,Milvus GPU 版本如约而至。

接入 NVIDIA A100、吞吐量提高 10 倍!Milvus GPU 版本使用指南,程序人生

接下来,我们就来看看如何使用 Milvus GPU 版本。

01.CUDA 驱动安装

首先,在我们的宿主机环境中,需要检查系统中是否已经正确的识别 NVIDIA 显卡,在命令行中输入:

lspci

在输出的设备中,看到 NVIDIA 字段,则说明该系统中已经安装了 NVIDIA 显卡。

00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma]
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.3 Non-VGA unclassified device: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:03.0 VGA compatible controller: Amazon.com, Inc. Device 1111
00:04.0 Non-Volatile memory controller: Amazon.com, Inc. Device 8061
00:05.0 Ethernet controller: Amazon.com, Inc. Elastic Network Adapter (ENA)
00:1e.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)
00:1f.0 Non-Volatile memory controller: Amazon.com, Inc. NVMe SSD Controller

以上是我的环境中的输出,可以看到其中识别到一张 NVIDIA T4 显卡。

接下来,可以去 NVIDIA 官方网站,添加 repo installer。

https://developer.nvidia.com/cuda-downloads

以 ubuntu 20.04 为例:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update

这里需要注意,如果宿主机没有 cuda 的需要,可以不安装 cuda;如果是 server 版本的操作系统,可以安装 headless 版本驱动;如果是 desktop 版本的系统,可以安装普通版本。

  • server
sudo apt install nvidia-headless-535
sudo apt install nvidia-utils-535
  • desktop
sudo apt install nvidia-driver-535
sudo apt install nvidia-utils-535

安装完成之后,需要重启一下系统,使得驱动生效。重启完成,可以输入:

nvidia-smi

如果可以看到详细的显卡状态,即表示驱动安装 OK。

Milvus GPU 版本镜像使用 cuda 11.8 打包,如果是 NVIDIA Tesla 系列专业显卡,需要的最小驱动版本>=450.80.02;如果是游戏显卡,需要驱动版本>=520.61.05。

Milvus GPU 镜像支持 Compute Capability 为 6.1、7.0、7.5、8.0 的 NVIDIA 显卡,查看显卡型号对应的Compute Capability,请参阅 https://developer.nvidia.com/cuda-gpus。NVIDIA Container Toolkit 安装则参考 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

02.Milvus GPU 可配环境变量

Milvus GPU 版本目前仅支持单个 Milvus 进程单个显卡,Milvus GPU 版本默认使用 device 0 显卡。如果需要使用多卡,可以通过启动多个 Milvus 进程或者容器,然后配合 CUDA_VISIBLE_DEVICES 环境变量来实现多卡部署。

容器环境下,可以通过 -e 来设置该环境变量:

sudo docker run --rm -e NVIDIA_VISIBLE_DEVICES=3 milvusdb/milvus:v2.3.0-gpu-beta

在 docker-compose 环境中,可以通过 device_ids 字段来设置,参考 https://docs.docker.com/compose/gpu-support/

注意,为单个 Milvus 进程或者单个容器配置了多张卡可见,Milvus 也只能使用其中的一张卡。

KNOWHERE_STREAMS_PER_GPU 环境变量可以用来设置 cuda stream 的并发数。适当的调大此参数,有可能获得更好的性能,但是,也会带来更多的显存开销。

KNOWHERE_GPU_MEM_POOL_SIZE 环境变量可以用来设置显存池大小。如果不设置改环境变量,Milvus 会自动分配当前 GPU 的一半内存作为显存池,如果在服务的过程中,出现显存池容量不足,那么 Milvus 会自动尝试再次增加显存池大小,默认上限是整个显存大小。

export KNOWHERE_GPU_MEM_POOL_SIZE=2048;4096

以上设置显存池初始大小为 2048 MB,最大显存池大小为 4096 MB。

如果在一张卡上部署 2 个 Milvus进程,那么,此环境变量一定需要合理的分配,否则 Milvus 会出现显存竞争崩溃的情况。

03.Milvus GPU 编译

本地编译 Milvus GPU 版本需要依赖英伟达提供的 cuda-toolkit,在安装 cuda-toolkit 请先完成 NVIDIA 驱动的安装:

sudo apt install --no-install-recommends cuda-toolkit 

本地编译 Milvus GPU 之前,我们需要先安装部分依赖软件以及工具:

sudo apt install python3-pip libopenblas-dev libtbb-dev pkg-config

安装 conan:

pip3 install conan==1.59.0 --user
expoprt PATH=$PATH:~/.local/bin

安装较新版本的 cmake>=3.23,参考 https://apt.kitware.com。golang 的安装可以参考 https://go.dev/doc/install。

make milvus-gpu

启动 milvus standalone 模式:

cd bin
sudo ./milvus run standalone

在配置好 nvidia-docker 或者 docker 替代品的情况下,可以很方便地使用 Milvus 提供的 docker-compose.yml 文件来完成容器化部署。

用户可以从 milvus repo 中获取 docker-compose.yml 文件,地址 https://github.com/milvus-io/milvus/blob/master/deployments/docker/gpu/standalone/docker-compose.yml

 docker-compose up -d

至此,便可完成 standalone 模式的 Milvus 部署。

如果用户宿主机有多张显卡,可以通过修改 docker-compose.yml 中的 device_ids 字段来修改映射到 Milvus 的显卡。

以上就是关于 Milvus GPU 版本使用说明的全部内容,大家有任何疑问都可以与我们交流。下一篇文章,我们将详解 Knowhere 2.0,欢迎阅读!

🌟「寻找 AIGC 时代的 CVP 实践之星」 专题活动即将启动!

Zilliz 将联合国内头部大模型厂商一同甄选应用场景, 由双方提供向量数据库与大模型顶级技术专家为用户赋能,一同打磨应用,提升落地效果,赋能业务本身。

如果你的应用也适合 CVP 框架,且正为应用落地和实际效果发愁,可直接申请参与活动,获得最专业的帮助和指导!联系邮箱为 business@zilliz.com。

本文由 mdnice 多平台发布文章来源地址https://www.toymoban.com/news/detail-698083.html

到了这里,关于接入 NVIDIA A100、吞吐量提高 10 倍!Milvus GPU 版本使用指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 公司来了个大牛:短短改了几行代码,接口吞吐量提升了 10 倍。。

    作者:FishBones 链接:https://juejin.cn/post/7185479136599769125 公司的一个ToB系统,因为客户使用的也不多,没啥并发要求,就一直没有经过压测。这两天来了一个“大客户”,对并发量提出了要求:核心接口与几个重点使用场景单节点 吞吐量 要满足最低500/s的要求。 当时一想,50

    2024年02月05日
    浏览(43)
  • Win10下运行ESP32 WiFi iperf例程(ESP32-S3 WiFi吞吐量测试)

    在win10平台下使用iperf工具及ESP32 iperf例程测试WiFi吞吐量 ESP32硬件:ESP32-S3-DevKitM-1(乐鑫官方ESP32-S3-MINI开发板) ESP IDF版本:IDF 4.4 iperf版本:iPerf 2.0.9    选择对应的CP2102串口号。  一键自动完成。 确保电脑已连入WiFi。(或可以由电脑开启热点。) 在cmd中运行: 运行后可以

    2023年04月09日
    浏览(77)
  • Kafka吞吐量

    目录 kafka的架构和流程 小文件对HDFS影响: 解决办法: ⾸先Kafka从架构上说分为⽣产者Broker和消费者,每⼀块都进⾏了单独的优化,⽐如⽣产者快是因为数据的批量发送,Broker快是因为分区,分区解决了并发度的问题,⽽且⽂件是采取的顺序写的形式。顺序写就可以有效的减少磁盘

    2023年04月23日
    浏览(52)
  • qps、tps、吞吐量

      tps全称为Transactions Per Second,指 服务器每秒处理的事务数 。常作为软件测试单位。   解释下这里 事务 的概念:一个事务指客户机向服务器发送请求,服务器做出反应的过程   一个事务的计时方式是从客户机发送请求时开始计时,收到服务器响应后结束计时。用1

    2023年04月10日
    浏览(47)
  • WiFi模块吞吐量测试

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在WiFi模块选型过程中,工程师会关注到WiFi模块的吞吐量,拿到样品之后,也会进行一个模块吞吐量的测试。本篇就以SKYLAB QCA9531 WiFi模块SKW99的测试角度出发,简单介绍一下WiFi模块怎么测试WiFi吞吐量。

    2024年02月09日
    浏览(50)
  • 了解区块链延迟和吞吐量

    大家鲜少提到如何正确地测量一个(区块链)系统,但它却是系统设计和评估过程中最重要的步骤。 系统中有许多共识协议、各种性能的变量和对可扩展性的权衡。 然而,直到目前都没有一种所有人都认同的可靠方法,能够让人进行苹果对比苹果这种同一范畴内的合理比较

    2024年02月02日
    浏览(46)
  • 如何提升SpringBoot项目的吞吐量?

    吞吐量是指系统在单位时间内成功处理请求的数量。当吞吐量不足以应对业务需求时,会导致请求Pile Up的情况发生,使系统不可用甚至宕机。提高吞吐量是保证系统可用性的有效手段之一。 当系统的吞吐量跟不上业务增长时,用户会感知到系统的响应变慢,严重时甚至会有\\\"访问不

    2024年02月08日
    浏览(52)
  • Rust中的高吞吐量流处理

    本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序。 最后,作者介绍了如何通过测量空闲和阻塞时间来优化流处理程序的性能,并将这些内容同步至Twitter和blog。 此外,作

    2024年02月14日
    浏览(48)
  • TPS、QPS、吞吐量,的计算公式

    TPS (transaction per second)代表每秒执行的事务数量,可基于测试周期内完成的事务数量计算得出。 TPS=事务数/时间(秒) 例如: 用户每分钟执行6个事务,TPS为6 / 60s = 0.10 TPS。 同时我们会知道事务的响应时间(或节拍):60秒完成6个事务,代表每个事务的响应时间或节拍为10秒。

    2024年02月09日
    浏览(54)
  • 通信信道带宽为1Gb/s,端到端时延为10ms。TCP的发送窗口为65535字节。试问:可能达到的最大吞吐量是多少?信道的利用率是多少?

    在Bing和CSDN上转了一圈,答案千奇百怪。很多只给计算,不给解释,对新手不太好理解。本答案参考了网上已有的几乎所有答案,补充了一些基本概念和公式,零基础友好,希望对各位有帮助。 首先,一些基本的概念:  1.通信信道带宽: 即 理论上 信道能够达到的 最大数据

    2024年02月03日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包