当前位置: 首页 > news >正文

【LLaVA-NeXT】请问,这种“auto分配”的行为具体是哪一个库的API实现的呢

Cursor-Composer1

device_map='auto' 的自动分配由两个库协作实现:

实现层次

1. Hugging Face Transformers(接口层)

  • 提供 from_pretrained() 方法,接收 device_map 参数
  • 代码中调用:
from transformers import AutoModelForCausalLM, LlavaQwenForCausalLM# 这些类的 from_pretrained 方法接收 device_map 参数
model = LlavaQwenForCausalLM.from_pretrained(model_path, device_map="auto",  # 传递给底层**kwargs
)

2. Hugging Face Accelerate(实现层)

  • 实际执行设备映射逻辑
  • requirements.txt 中可见:accelerate==0.29.3
  • Transformers 内部调用 Accelerate 的 API 完成自动分配

调用链

load_pretrained_model()↓
kwargs["device_map"] = "auto"↓
LlavaQwenForCausalLM.from_pretrained(..., **kwargs)↓
transformers.PreTrainedModel.from_pretrained()↓
accelerate.infer_auto_device_map()  # 自动推断设备映射↓
accelerate.dispatch_model()  # 实际分配模型到设备

Accelerate 库的关键 API

Accelerate 库中实现自动分配的主要函数:

  1. accelerate.infer_auto_device_map()

    • 根据模型大小和可用显存,推断最优设备映射
    • 返回一个字典,指定每层应该放在哪个设备
  2. accelerate.dispatch_model()

    • 根据设备映射字典,将模型实际分配到不同设备
    • 处理 GPU↔CPU 数据传输

验证方法

可以查看 Accelerate 的源码或文档:

# 可以直接使用 Accelerate 的 API
from accelerate import infer_auto_device_map, dispatch_model# 推断设备映射
device_map = infer_auto_device_map(model, max_memory={0: "10GB", "cpu": "30GB"},  # GPU 0最多10GB,CPU最多30GBno_split_module_classes=["LlamaDecoderLayer"]  # 某些层不分割
)# 分配模型
model = dispatch_model(model, device_map=device_map)

总结

  • Transformers:提供接口,接收 device_map 参数
  • Accelerate:实现自动分配逻辑(infer_auto_device_mapdispatch_model

因此,device_map='auto' 的自动分配行为主要由 Accelerate 库实现,Transformers 库负责调用它。

相关文档

  • Accelerate 文档:https://huggingface.co/docs/accelerate/
  • Transformers 文档中关于 device_map 的说明:https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel.from_pretrained

如果想深入了解,可以查看 Accelerate 库的源码,特别是 accelerate/utils/device_utils.pyaccelerate/utils/modeling.py 这两个文件。

http://www.dtcms.com/a/578581.html

相关文章:

  • Riverpod框架内部实现原理剖析
  • 图解Redis面试篇
  • 网站首页设计风格wap网站源码下载
  • 获取泛型信息及获取注解信息
  • 会展免费网站模板网站优化课程
  • 【赵渝强老师】Redis数据的迁移
  • Rust编程学习 - 为什么说Cow 代表的是Copy-On-Write, 即“写时复制技术”,它是一种高效的 资源管理手段
  • Rust开发完全指南:从入门到与Python高效融合
  • 石家庄免费建站模板我不想找之前做网站的续费
  • 商城网站模板 免费五个跨境电商平台
  • 无人设备遥控器之数字图传技术
  • 哪个网站用织梦做的2017网站开发就业前景
  • 网站设计公司深圳ppt的网站导航栏怎么做的
  • React中的componentWillUnmount 使用
  • 培训型网站建设中华建设网站
  • 大型网站建设公司推荐店面设计餐饮
  • 中山品牌网站建设推广注册域名成功后怎样建设网站
  • 化妆品网页设计模板素材做网站优化用什么软件
  • 移动端高端网站怎么帮商家推广赚钱
  • 餐饮网站源码一个网站有几个快照
  • Windows Qt打开外部程序
  • 怎么建设商品网站网站建设首选公司
  • 西宁网站建设加盟代理北京高端网站制作公司
  • 微信小程序minium自动化测试SOP
  • 如何做好电子商务网站开发企业网站博客上如何营销
  • 【LeetCode】103. 二叉树的锯齿形层序遍历
  • 车联网终端TBOX车载无线4G网络盒子知识详解
  • 什么网站能免费做公众号封面做一个平面网站的成本
  • 作业11.6
  • 做网站项目流程国外文件传输网站