Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you

这篇具有很好参考价值的文章主要介绍了Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题

使用了自己创建的dataset和collate_fn,使用了默认的dataloader,当设置num_worker的时候,超过0则报如下错误:

RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method

二、原因

查看了平时其他人的代码,发现自己在collate_fn对tensor使用了.to(device),而别人则是在从dataloader取出数据后,放入模型前,将其移到device中,例如:

    for epoch in range(max_epoch):
        for batch_idx, (en_id, att_mask_en, zh_id, att_mask_zh) in enumerate(data_loader): 
                en_id = en_id.to(device)

而我则是错误地在collate_fn中将数据移至device中:

def collate_fn(batch):
    en, zh = list(zip(*batch))
    en_output = tokenizer.encode_batch(en,is_pretokenized=True)
    zh_id,att_mask_zh = zh_mapper.encode_batch(zh)
    en_id =[]
    att_mask_en = []
    for item in en_output:
        en_id.append(item.ids)
        att_mask_en.append(item.attention_mask)
    en_id = torch.tensor(en_id, dtype=torch.long).to(device)
    att_mask_en = torch.tensor(att_mask_en, dtype=torch.bool).to(device)
    zh_id = torch.tensor(zh_id, dtype=torch.long).to(device)
    att_mask_zh = torch.tensor(att_mask_zh, dtype=torch.bool).to(device)

    return en_id, att_mask_en, zh_id, att_mask_zh

当然,在定义dataset,方法__getitem__ 里把张量放到device里也会产生同样的错误。

此外,我还使用了官方建议的spawn:

if __name__ == '__main__':
    torch.multiprocessing.set_start_method('spawn')
    train()

但是gpu会卡住不运行数据加载。 文章来源地址https://www.toymoban.com/news/detail-859300.html

到了这里,关于Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【控制台】报错:Cannot access ‘xxx‘ before initialization

    示例: 示例代码: ES6:当程序的控制流程在新的作用域(module function 或 block作用域)进行实例化时,在此作用域中用let/const声明的变量会先在作用域中被创建出来,但因此时还未进行词法绑定,所以是不能被访问的,如果访问就会抛出错误。因此,在这运行流程进入作用域

    2024年02月11日
    浏览(40)
  • UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount()【已解决】

    nvcc -V正常 nvidia-smi正常 打开NVIDIA设置,升级显卡驱动后解决。

    2024年02月15日
    浏览(48)
  • 【CUDA driver initialization failed, you might not have a CUDA gpu】pytorch 解决方案

    在coding的时候我们经常在指定device的时候用这么一句代码: 但是有时候我们会发现device确实是放在了cpu上面,所以为了明确出错的原因,我们在shell里先import了torch,再执行 torch.cuda.is_available() ,发现在返回 False 结果之前给出了错误原因,其中部分内容就是我们在标题中写的

    2024年02月12日
    浏览(38)
  • CUDA小白 - NPP(4) 图像处理 Data Exchange and Initialization(2)

    cuda小白 原始API链接 NPP GPU架构近些年也有不少的变化,具体的可以参考别的博主的介绍,都比较详细。还有一些cuda中的专有名词的含义,可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus,可以看这里。 如有问题,请指出,谢谢 Convert Bit Dep

    2024年02月09日
    浏览(35)
  • RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling `cublas‘

    调用nn.linear时出现RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling `cublas’错误 ,搜索网上资料,主要指出以下原因: batch size太大(本人将batchsize设置成4,够小吧!还是不行。。。) CUDA版本和torch不匹配(本人cuda版本是10.1,pytorch版本安装的是cuda10.1+python3.8的pytorch1.

    2023年04月08日
    浏览(27)
  • 安装oneforall遇到的问题ImportError: cannot import name ‘sre_parse‘ from ‘re‘(C:\Python311\Lib\re\_init_.py)

    昨天试着安装一下信息收集特别好用的工具oneforall,没想到却遇到了一个特别大的问题 上网查找,却没想到竟然你没有一个答案,要么没有正确答案,要么众说纷纭,索性自己排查错误 根据报错提示,说的是不能从re中导入sre_parse,而且还和re文件夹下的_init_.py有关 下面是我

    2023年04月17日
    浏览(33)
  • RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling `cublasCreate(handle)`

    DialoGPT/data_loader.py at 457835e7d8acd08acf7f6f0e980f36fd327ea37c · microsoft/DialoGPT · GitHub 报错:RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling `cublasCreate(handle)` 我把输入用同样形状的随机张量进行了测试,发现用随机的整数张量可以,但是用我的输入就不行,于是想看看两者的区别

    2024年02月11日
    浏览(104)
  • ORA-01033: ORACLE initialization or shutdown in progress---惜分飞

    客户反馈数据库使用plsql dev登录报ORA-01033: ORACLE initialization or shutdown in progress的错误   出现该错误一般是由于数据库没有正常open成功,查看oracle 告警日志发现 Mon Jan 22 16:55:50 2024 Database mounted in Exclusive Mode Lost write protection disabled Completed: alter database mount exclusive alter database open

    2024年01月23日
    浏览(30)
  • vue3 + vite Cannot access ‘xxx‘ before initialization 组件热更新失败,es模块循环引用问题

    问题原因 本人 在 pinia stores 文件中使用了 router ,而main.ts 已经引入过router main.ts pinia 下 modelCache.ts 文件 pinia 下 modelCache.ts 文件使用了router 并Model组件中 引入了modelCache.ts 该文件 这样导致es模块循环 vite热更新失败 解决 pinia 下 modelCache.ts 文件 router 引入方式改为 函数引入 在

    2024年02月12日
    浏览(60)
  • 安装pytorch.cuda时出现Solving environment: failed with initial frozen solve. Retrying with flexible solve

    使用了网上大家说的更新conda,以及更换镜像均无法解决。便尝试使用pip安装指令。  1、将清华镜像源添加到PIP的搜索目录中,打开ANACONDA PROMPT,键入  2、进入PYTORCH官网,选择适合自己电脑系统的版本,在这里查看不同显卡驱动所对应的CUDA版本。  复制安装指令 3、在anacon

    2024年02月15日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包