记录torch运行的bug

Traceback (most recent call last):
  File "/mnt2/wsj/table/basetest/test_single.py", line 243, in <module>
    QWen2VL()
  File "/mnt2/wsj/table/basetest/test_single.py", line 116, in QWen2VL
    generated_ids = model.generate(**inputs, max_new_tokens=512)
  File "/home/turing1/miniconda3/envs/MiniCPMV_wsj/lib/python3.10/site-packages/torch/utils/_contextlib.py", line 116, in decorate_context
    return func(*args, **kwargs)
  File "/home/turing1/miniconda3/envs/MiniCPMV_wsj/lib/python3.10/site-packages/transformers/generation/utils.py", line 2048, in generate
    result = self._sample(
  File "/home/turing1/miniconda3/envs/MiniCPMV_wsj/lib/python3.10/site-packages/transformers/generation/utils.py", line 3044, in _sample
    next_tokens = torch.multinomial(probs, num_samples=1).squeeze(1)
RuntimeError: CUDA error: device-side assert triggered
Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.

 试试看只使用一个gpu

    model = Qwen2VLForConditionalGeneration.from_pretrained(
        weight_path,
        torch_dtype=torch.bfloat16,
        device_map="sequential",
    )
    processor = AutoProcessor.from_pretrained(weight_path)
    device = torch.device('cuda:0')    
    text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
    image_inputs, video_inputs = process_vision_info(messages)
    inputs = processor(
        text=[text],
        images=image_inputs,
        videos=video_inputs,
        padding=True,
        return_tensors="pt",
    ).to(device)
    generated_ids = model.generate(**inputs, max_new_tokens=512)
    generated_ids_trimmed = [
        out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
    ]
    output_text = processor.batch_decode(
        generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
    )

### PyTorch `torch.hub.load` 的使用方法 #### 函数定义 PyTorch 提供了 `torch.hub.load()` 方法来加载预训练模型或其他资源。此函数支持从 GitHub 或其他源代码仓库中直接下载并加载模型,也可以通过指定路径加载本地存储的模型。 其完整的参数列表如下: ```python torch.hub.load( repo_or_dir, # 存储库地址或目录路径 (字符串形式) model, # 要加载的模型名称 (字符串形式) *args, # 可变长度的位置参数 source='github', # 数据源,默认为 'github' trust_repo=None, # 是否信任远程仓库(布尔值) force_reload=False,# 是否强制重新下载模型文件 verbose=True, # 是否打印日志信息 skip_validation=False, # 是否跳过验证流程 **kwargs # 关键字参数 ) ``` --- #### 示例代码 以下是基于引用内容的一个具体示例[^1],展示如何使用 `torch.hub.load` 加载 DINOv2 预训练模型: ```python import torch # 解决特定版本 Bug 的临时修复方案 torch.hub._validate_not_a_forked_repo = lambda a, b, c: True # 定义要加载的模型名 backbone_name = "dinov2_vits14" # 使用 torch.hub.load 下载并加载模型 backbone_model = torch.hub.load( repo_or_dir="facebookresearch/dinov2", model=backbone_name, source='github', trust_repo='check' # 自动检测仓库可信度 ) print(backbone_model) # 打印模型结构 ``` 上述代码片段展示了如何解决潜在的兼容性问题以及成功加载来自 Facebook Research 开发的 DINOv2 模型的方法。 --- #### 参数详解 - **repo_or_dir**: 表示目标模型所在的存储库 URL 或本地目录路径。如果是一个有效的 URL,则会尝试从中克隆存储库;如果是本地路径,则直接读取其中的内容。 - **model**: 这是要实例化的类或者函数的名字,在给定存储库内的 Python 文件里被定义好之后可以通过调用返回对应对象。 - **source**: 默认设置为 `'github'` ,意味着它将寻找公共可用的 GitLab/GitHub 地址作为数据来源位置之一。用户还可以自定义其他合法选项比如 `"local"` 来指示只考虑本机上的资料夹而非网络链接。 - **trust_repo**: 控制是否允许执行未知第三方提供的脚本逻辑。当设为 `'yes'` 或者显式的真值时表明完全接受外部贡献者的提交记录而无需额外确认安全性方面的问题; 设置成 `'no'` 则拒绝任何未经审核过的改动项. - **force_reload**: 如果设置为 `True` 将忽略缓存副本转而每次都去联网获取最新版档案包即使之前已经存在相同标签号下的快照也会如此操作从而确保获得最前沿的研究成果更新频率较高情况下特别有用处。 - **verbose**: 决定了运行期间是否有详细的进度报告输出到标准错误流上,默认开启有助于调试过程中的跟踪定位工作进展状况。 - **skip_validation**: 当启用该标志位后可以绕开某些内置的安全检查机制以便快速完成初始化阶段但同时也增加了遭遇恶意攻击的风险因此除非必要否则不建议轻易修改此项默认配置状态即保持关闭模式运作更为稳妥可靠些。 --- #### 区别于 `torch.load` 需要注意的是,虽然两者都涉及到了序列化与反序列化进程之中但是它们各自适用场景完全不同 [`torch.load`](https://pytorch.org/docs/stable/generated/torch.load.html)[^2] 主要是用来恢复先前保存下来的张量变量或者是神经网络整体架构连同权重参数一起打包好的二进制格式文件而已并不能单独实现像前者那样便捷地在线抓取开源项目里的现成解决方案提供给我们直接拿来就用的优势所在之处明显有所差异。 另一方面[`torch.hub.load`](https://pytorch.org/docs/stable/hub.html?highlight=torch%20hub%20load#torch.hub.load)[^3] 更侧重于是面向社区共享精神下诞生出来的一种工具集能够让开发者们更加轻松愉快地享受到彼此之间相互协作所带来的便利条件进而推动整个人工智能领域向前发展得更快更好一些! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值