-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
反向传播不带梯度 #8
Comments
可以具体说下" |
梯度问题已经解决。另外请问怎么获取图片特征输入的长度,假如图片是384384,patch大小是1616,那么patch个数应该是576. 请问怎么获取图片输入特征的长度。谢谢 |
假设图片经过vision model (ViT) 编码后的维度是 |
好滴,请问怎么获取到image cross attention 和 text cross attention的qk值?因为底层调用都是huggingface的BERT的modelling_bert代码,没有重构VLE代码融合部分。谢谢。 |
我们没有对cross attention内部做修改,如果要获取其中的query和key,可以考虑在 |
谢谢,还有一个问题,请问怎么拿到视觉的最后一层的特征,也就是�hidden_states |
VLEModel的输出中包含了最后的视觉特征,可以参照下面的代码 model = VLEModel.from_pretrained(model_name)
model_outputs = model(inputs)
# 最后的图像表示
model_outputs.image_embeds
# 最后的文本表示
model_outputs.text_embeds |
好的,谢谢。还有一个问题,请问VLE模型可以在huggingface的框架上可以使用两个2080ti把模型分配在2个GPU上去吗?或者共享内存设置,例如device_map或者共享CPU内存,目前我们还没有成功,但是在一个3060可以运行或者一个4080可以运行也是勉强。谢谢 |
没有这样做过,可以试试在device_map中手动指定模型的各模块分配到哪张卡上。使用device_map可能会和分布式训练冲突 device_map={
"vision_model": 0,
"text_model": 0,
"text_projection_layer": 1,
"image_projection_layer": 1,
"token_type_embeddings": 1,
"cross_modal_image_layers": 1,
"cross_modal_text_layers": 1,
"cross_modal_image_pooler": 1,
"cross_modal_text_pooler": 1
} |
您好,这是我们的代码,只能注释model.to(device,无法加载到2个2080ti上。只是在CPU上可以运行。我们只是推理不训练。请问要怎么解决好呢?谢谢 import torch if name == "main":
|
使用VLEForVQA模型的话,device_map里的模块名要调整下 device_map = {
"vle.vision_model": 0,
"vle.text_model": 0,
"vle.text_projection_layer": 1,
"vle.image_projection_layer": 1,
"vle.token_type_embeddings": 1,
"vle.cross_modal_image_layers": 1,
"vle.cross_modal_text_layers": 1,
"vle.cross_modal_image_pooler": 1,
"vle.cross_modal_text_pooler": 1,
"vqa_classifier": 1,
} 在加载model时传入device_map参数 model = VLEForVQA.from_pretrained("./pretrained/vle-base-for-vqa",device_map=device_map) 这时模型已经分配到两张卡上了。 关于Pipeline,似乎不支持多卡(device_map),只支持传入device。比如下面这行代码,传入 vqa_pipeline = VLEForVQAPipeline(model=model, device=0, vle_processor=vle_processor) 这边又会把 |
您好,使用model = VLEForVQA.from_pretrained("./pretrained/vle-base-for-vqa",device_map=device_map)确实用到了2个2080ti,在batch_size=1时,只跑了4个数据,显存就爆满,报出out of memory的错误,请问是不是当前的设备的原因,导致无法继续运行?如果不是的话,请问还有其他的解决方案吗?谢谢 |
可以试试下面几个方法,能否降低显存使用
|
你好,1方案昨天已经尝试了,但是没有成功,请问可否再给个device_map字典。2 我们是需要梯度的,所以Torch.no_grad应该不会采用,已经修改了bert底层,打开记录梯度,3 已经尝试了 但是模型输入图片必须得是576576,改成384384报错,请问您那边可以尝试一下resize吗?谢谢 |
|
如果图片改成384*384大小,造成维度不匹配了 |
试下在加载model后调整 patch_size = model.config.vision_config.patch_size
position_length_after = (model.config.vision_config.image_size//model.config.vision_config.patch_size)**2 + 1
position_embed_dim = model.vle.vision_model.vision_model.embeddings.position_embedding.embedding_dim
new_state_dict = extend_position_embedding(model.state_dict(), patch_size, model.config.vision_config.image_size)
model.vle.vision_model.vision_model.embeddings.position_embedding = nn.Embedding(position_length_after, position_embed_dim, device=model.vle.vision_model.vision_model.embeddings.position_embedding.weight.device)
model.vle.vision_model.vision_model.embeddings.register_buffer("position_ids", torch.arange(position_length_after, device=model.vle.vision_model.vision_model.embeddings.position_ids.device).expand((1, -1)))
model.load_state_dict(new_state_dict) |
还有2个问题 1源代码用的是DeBERTa-v2 in huggingface. 2请问在A100上可以做多显卡推理吗?谢谢 |
|
你好,当使用反向传播到cross_modal_image_layers和cross_modal_text_layers的时候 为什么会没有梯度。在BERT的modelling_bert 设置梯度的时候显示是没有,请问怎么拿到每一层的梯度,例如cross_modal_image_layers倒数第一层的特征图和梯度。谢谢
The text was updated successfully, but these errors were encountered: