You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何手动执行BLOOM模型推理?(手动加载BLOOM块至VRAM)

问题介绍

我们项目的目标之一是将BLOOM模型分布式部署在多台计算机上,目前已解决计算机间的通信问题,但不清楚如何手动执行推理。掌握该方法后,我们就能构建计算机“链”来加速整体计算。

手动执行推理对我们至关重要,实现后我们会基于主机GPU优化链节点的选择流程。

简化假设(后续版本会调整):

  • 分布式架构接收的提示词按顺序处理
  • 计算机数量及参数无限制
  • 所有计算机的GPU型号一致
  • 每台计算机仅配备一块GPU
  • 每块GPU加载一个BLOOM块

技术相关说明

计算机配置:

  • 操作系统:Windows 10 Home
  • 处理器:Intel i7-11700K
  • 内存:32GB
  • 显卡:NVIDIA RTX 3060 12GB VRAM

已安装包(pip freeze):

accelerate==0.16.0
asttokens==2.2.1
backcall==0.2.0 
certifi==2022.12.7
charset-normalizer==3.0.1
colorama==0.4.6
comm==0.1.2
debugpy==1.6.6
decorator==5.1.1
executing==1.2.0
filelock==3.9.0
huggingface-hub==0.12.0
idna==3.4
ipykernel==6.21.1
ipython==8.9.0
jedi==0.18.2
jupyter_client==8.0.2
jupyter_core==5.2.0
matplotlib-inline==0.1.6
nest-asyncio==1.5.6
numpy==1.24.1
packaging==23.0
pandas==1.5.3
parso==0.8.3
pickleshare==0.7.5
Pillow==9.4.0
platformdirs==2.6.2
prompt-toolkit==3.0.36
psutil==5.9.4
pure-eval==0.2.2
Pygments==2.14.0
python-dateutil==2.8.2
pytz==2022.7.1
pywin32==305
PyYAML==6.0
pyzmq==25.0.0
regex==2022.10.31
requests==2.28.2
safetensors==0.2.8
six==1.16.0
stack-data==0.6.2
tokenizers==0.13.2
torch==1.13.1+cu117
torchaudio==0.13.1+cu117
torchvision==0.14.1+cu117
tornado==6.2
tqdm==4.64.1
traitlets==5.9.0
transformers==4.26.0
typing_extensions==4.4.0
urllib3==1.26.14
wcwidth==0.2.6

仓库结构(最简形式):

bloom
   ↳ bigscience/bloom仓库文件
bloom-7b1
   ↳ bigscience/bloom-7b1仓库文件
venv
   ↳ ...(虚拟环境文件)
main.py

代码(main.py):

from pprint import pprint

import torch

from transformers import AutoTokenizer, BloomConfig
from transformers.models.bloom.modeling_bloom import BloomBlock as BloomBlock

tokenizer = AutoTokenizer.from_pretrained(r'E:\programming\python\bloom-playground\models\bloom')

prompt = "Hi, I am TapMadl and I want to "
input_ids = tokenizer(prompt, return_tensors="pt").to(0)

configuration = BloomConfig('bloom\config.json')
pprint(configuration.num_hidden_layers)

modules = torch.nn.ModuleList([BloomBlock(configuration) for _ in range(configuration.num_hidden_layers)])

pprint(type(modules[0]))
pprint(len(modules))

module1 = modules[0]

module1.forward(input_ids)

代码输出:

2
<class 'transformers.models.bloom.modeling_bloom.BloomBlock'>
2
Traceback (most recent call last):
  File "c:\programming\python\bloom-prototyping\main.py", line 23, in <module>
    module1.forward(input_ids)
TypeError: BloomBlock.forward() missing 2 required positional arguments: 'alibi' and 'attention_mask'

代码说明:

最初我使用bigscience/bloom仓库示例代码中的AutoTokenizer和AutoModelForCausalLM流水线,希望找到一种可逐块执行推理的简便方法,但未能实现。

随后我通过调试追踪函数调用,研究手动推理的最小可行方案(MVP),发现AutoModelForCausalLM类实际逻辑复杂。通过在Jupyter Notebook中调试和修改代码,得到了上述代码。

希望有人能指导我实现手动推理,感谢帮助。


内容的提问来源于stack exchange,提问作者TapMadl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:41:44