亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

如何在家庭設備上運行 Llama 3.1 405B?構建 AI 集群!

分布式Llama

在开源LLM模型和闭源LLM模型的竞争中,开源模型最大的优势是可以本地运行。你不需要依赖外部提供商,也不需要支付额外的费用,除了电力和硬件成本。然而,随着模型规模的增大,这一优势开始减弱。运行需要大量内存的巨大模型并不容易。幸运的是,张量并行和分布式推理可能会有所帮助。

张量并行

大多数大型语言模型(LLM)的计算涉及矩阵乘法,这占了所有计算的大约97-98%。矩阵乘法很容易在多个CPU/GPU核心上并行化。同样的方法也可以在多个设备上进行。设备可以这样划分,每个设备只计算矩阵乘法的一部分。如果一个设备可以在n秒内计算出矩阵乘法,那么两个设备应该可以在n / 2秒内完成计算!这就是张量并行化。

张量并行计算,计算时间

这听起来很有前景,但主要的瓶颈在于同步。我们可以加快乘法运算的速度,但在某个时刻,我们需要同步神经网络的状态。这会花费时间。专业的AI集群使用高级链接在GPU之间通信(如NVLink),以实现非常高的传输速度。然而,家用设备的以太网速度较慢。令人惊讶的是,如果模型执行器的架构设计为减少传输大小,那么同步LLM所需的数据量可以非常低。例如,如果集群由2个设备组成,那么将量化后的Llama 3 8B转换为Q40格式(6.3GB)时,每令牌只需要1MB的数据来同步。这非常低。

这里就是了。张量并行可以加速推理,但同步会减慢速度。这两个因素的结合将决定最终的性能。如果你有8个设备,并且可以通过快速链接将它们连接起来,你将会观察到显著的速度提升(通过USB4进行同步看起来非常有前景,你可以实现从10到20 Gbps的速度)。

那么,我们如何在家运行大型模型呢?你需要一个实现这些想法的项目。让我来介绍Distributed Llama项目。

分布式Llama

分布式Llama是一个项目,允许你在多个设备上运行LLM模型。它使用张量并行技术,并针对所需同步的数据量较少进行了优化。分布式Llama区分了你可以在设备上运行的两种类型的节点:

  • 根节点 — 作为集群根节点的应用程序,负责协调整个集群。
  • 工作节点 — 作为工作进程的应用程序,执行根节点的指令。

目前,Distributed Llama仅支持CPU推理,但将来会有所改变。

AI 集群拓扑,4 个设备,总内存 256 GB RAM

所以,如果你的家庭集群由4个设备组成,你应该在第一个设备上运行根节点,并在其余设备上运行3个工作节点。分布式Llama在所有设备之间分配内存使用。例如,如果一个LLM模型需要238GB的内存,那么每个节点应该有 238 GB /n 的内存。例外是根节点,它需要比 238 GB /n 多出几个百分点的内存,因为它需要在内存中保留一些额外的层。

运行 405B 模型

为了运行Llama 3.1 405B,我们需要克隆Distributed Llama仓库,并在所有用于推理的设备上构建dllama应用程序。需要一个编译器,如G++或类似的编译器。

    git clone https://github.com/b4rtaz/distributed-llama.git  
    make dllama

然后,你需要将所有设备连接到同一个本地网络。你可以使用任何以太网交换机来实现这一点。如前所述,同步时间是一个重要因素,因此你应该使用尽可能快的交换机。千兆以太网是最基本的要求。你也可以考虑通过USB4连接设备并创建一个USB4网状网络。接下来,你需要在工作设备上运行工作节点:

    ./dllama worker --port 9998 --nthreads 4

--nthreads 参数定义了应该使用多少个 CPU 内核来进行处理。你应该将其设置为你设备的 CPU 内核数量。如你所见,工作节点不需要模型文件。这些文件仅对根节点是必需的。最初,根节点将模型的所有切片分发到工作节点。

在运行根节点之前,我们需要将Llama 3 405B模型下载到根设备并转换为Distributed Llama格式。你可以手动进行转换,或者直接从Huggingface下载预转换的权重。使用Distributed Llama仓库中的launch.py脚本,你可以通过执行一个命令来下载模型和分词器。所有文件将被放置在models文件夹中。

    launch.py llama3_1_405b_instruct_q40

确保您已经在Huggingface上接受了[Llama 3.1许可证](http://launch.py llama3_1_405b_instruct_q40)。确保您的磁盘上有大约240GB的空闲空间。

现在你可以在根节点上运行推理。

    ./dllama inference \  
       --model models/llama3_1_405b_instruct_q40/dllama_model_llama3_1_405b_instruct_q40.m \  
       --tokenizer models/llama3_1_405b_instruct_q40/dllama_tokenizer_llama3_1_405b_instruct_q40.t \  
       --buffer-float-type q80 \  
       --prompt "Hello world" \  
       --steps 64 \  
       --nthreads 4 \  
       --workers 10.0.0.1:9998 10.0.0.2:9998 10.0.0.3:9998

请注意,--workers 参数接受带有工作节点端口的 IP 地址。地址之间用空格分隔。此外,您可以通过设置 --steps N 参数来定义您期望的单词预测数量。

如果你想要运行支持 /v1/chat/completions 端点的 API 服务,你应该构建 dllama-api 应用程序,并在根设备上运行它而不是 dllama inference

    ./dllama-api \  
      --model models/llama3_1_405b_instruct_q40/dllama_model_llama3_1_405b_instruct_q40.m \  
      --tokenizer models/llama3_1_405b_instruct_q40/dllama_tokenizer_llama3_1_405b_instruct_q40.t \  
      --buffer-float-type q80 \  
      --max-seq-len 2048 \  
      --nthreads 4

分布式Llama还支持--kv-cache-storage disk参数,该参数通过将KV缓存移动到磁盘来减少RAM的使用。Llama 3.1模型需要大约34GB的RAM来在内存中存储完整的上下文(F32)(131k令牌)。通过设置此参数,您可以减少RAM的使用,但需要额外的磁盘空间。请注意,KV缓存会在所有节点之间分配,因此您需要为每个节点设置此选项。

第二个减少RAM使用的方法是使用 --max-seq-len 2048 参数。如果你不需要完整的上下文大小,可以将其减小,这将同时减少内存消耗。

就这样!别忘了在 GitHub 上分享你的结果。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消