变色龙chameleon模型适配昇腾做训练开发

举报
yd_242080474 发表于 2025/01/06 17:07:18 2025/01/06
【摘要】 变色龙chameleon模型的官方仓库(https://github.com/facebookresearch/chameleon)并未开源训练的源代码,需要做训练代码的开发。开发方向昇腾modellink(已改名MindSpeed-LLM)的代码仓(https://Ascend/MindSpeed-LLM)具备llm的训练能力,但不支持多模态,不适配变色龙模型。根据变色龙的论文,变色龙模型...

变色龙chameleon模型的官方仓库(https://github.com/facebookresearch/chameleon)并未开源训练的源代码,需要做训练代码的开发。

开发方向

昇腾modellink(已改名MindSpeed-LLM)的代码仓(https://Ascend/MindSpeed-LLM)具备llm的训练能力,但不支持多模态,不适配变色龙模型。根据变色龙的论文,变色龙模型的结构与llama2的结构类似,但在tokenizer方面有所不同,变色龙的tokenizer是支持多模态的,而llama2的tokenizer不支持。于是选择在tokenizer层面适配变色龙模型。

开发过程

  1. 变色龙、modellink仓库克隆,安装依赖,环境搭建。
  2. 跑通llama2训练验证开发环境无异常。
  3. 阅读源码
    1. 阅读变色龙源码,定位tokenizer代码以及调用方式,处理逻辑。
    2. 阅读modellink源码。确定训练执行的流程,以及tokenizer的调用时机与调用点。确定数据预处理流程,以及数据输入格式与处理方法。


  1. 迁移变色龙的tokenizer部分,为适配开发做准备。
  2. 修改脚本调用参数,修改代码使得modellink在对应条件下引入变色龙的tokenizer。
  3. 观察分析输入输出
    1. 断点调试变色龙、modellink的tokenizer,观察tokenizer的输出,以及调用点引用的对象结构。
    2. 观察变色龙、modellink的tokenizer的输入数据,比较异同,分析需要兼容的部分。
    3. 观察训练数据的处理输出与对应tokenizer的输入,分析设计数据处理方案。


  1. 对齐输入输出
    1. 构造1000+条带图片和文本的训练数据,数据格式选用modellink支持的json格式,用作调试。
    2. 根据源码分析,modellink采用handler处理输入的训练数据。自定义新的ChameleonPretrainHandler类继承基类,重写_filter()方法,对齐输入数据与tokenizer的调用点。
    3. 根据数据输入,调整tokenizer对象的调用类结构。


  1. 训练部分引用变色龙的tokenizer,替换原有tokenizer。
  2. 新建工厂函数,调整训练需要的tokenzier格式,传入对应的vocab_size和eod_id参数。
  3. 调试训练,根据训练情况以及具体报错修改代码直至跑通。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。