THUDM / VisualGLM-6B

Chinese and English multimodal conversational language model | 多模态中英双语对话语言模型
Apache License 2.0
4.05k stars 414 forks source link

请问可以实现用qlora+model parallel 吗 #349

Open zin-Fu opened 3 months ago

zin-Fu commented 3 months ago
          因为`bitsandbytes`实现模型量化的时候是通过重载`.cuda()`函数实现的,也就是说模型在放到显卡的时候会发生量化(改变tensor维度)。在微调的时候,加载的预训练权重是fp16的,所以需要设置`args.device='cpu'`,把权重加载进来再调用`.cuda()`。因为这个是`bitsandbytes`的实现,我们也没办法控制,只能适配。

所以维度不一致是显卡配置的问题,.cuda()调用失败了。

Originally posted by @1049451037 in https://github.com/THUDM/VisualGLM-6B/issues/125#issuecomment-1592488628

zin-Fu commented 3 months ago

显卡资源有限 (4070*2), 用lora+model parallel 还是会报错OOM(并且根据这个issue作者有提到这个https://github.com/THUDM/VisualGLM-6B/issues/209#issuecomment-1683482499)

我根据https://github.com/THUDM/VisualGLM-6B/issues/209 这个issue修改了finetune_qlora.sh和finetune_visualglm.py这两个文件

但是如果用qlora的话如果要先在cpu上加载模型,那么 model, args = FineTuneVisualGLMModel.from_pretrained(model_type, args, overwrite_args={'model_parallel_size':2}) 这个命令就无法执行了(我只有一个cpu)

那这样的话请问怎么实现用qlora+model parallel呢