正确设置PyTorch训练时使用的GPU资源

2023-09-21 16:58:48

背景:

最近在使用Hugging Face的transformers api来进行预训练大模型的微调,机器是8卡的GPU,当我调用trainer.train()之后,发现8个GPU都被使用了,因为这个机器上面还有其他人跑的模型,当我进行训练的时候,GPU的使用率就接近了100%,这样导致其他人的模型响应速度特别的慢,因为他们使用的是4~7四张卡,所以我需要避开这四张卡,那怎么设置我的模型在指定的卡上面训练呢?

机器环境:NVIDIA A100-SXM

transformers版本:4.32.1

torch版本:2.0.1

方式一【失败】

通过导入os来设置GPU的可见性,代码如下:

import os

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "2,3"

通过设置环境变量CUDA_VISIBLE_DEVICES来指定torch可见的GPU,当这样设置之后,运行程序,程序会抛出如下错误:

Traceback (most recent call last):
  File "/data2/.env/lib/python3.9/site-packages/torch/cuda/__init__.py", line 260, in _lazy_init
    queued_call()
  File "/data2/.env/lib/python3.9/site-packages/torch/cuda/__init__.py", line 145, in _check_capability
    capability = get_device_capability(d)
  File "/data2/.env/lib/python3.9/site-packages/torch/cuda/__init__.py", line 381, in get_device_capability
    prop = get_device_properties(device)
  File "/data2/.env/lib/python3.9/site-packages/torch/cuda/__init__.py", line 399, in get_device_properties
    return _get_device_properties(device)  # type: ignore[name-defined]
RuntimeError: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "../aten/src/ATen/cuda/CUDAContext.cpp":50, please report a bug to PyTorch. 

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/data2/.env/lib/python3.9/site-packages/torch/cuda/__init__.py", line 395, in get_device_properties
    _lazy_init()  # will define _get_device_properties
  File "/data2/.env/lib/python3.9/site-packages/torch/cuda/__init__.py", line 264, in _lazy_init
    raise DeferredCudaCallError(msg) from e
torch.cuda.DeferredCudaCallError: CUDA call failed lazily at initialization with error: device >= 0 && device < num_gpus INTERNAL ASSERT FAILED at "../aten/src/ATen/cuda/CUDAContext.cpp":50, please report a bug to PyTorch. 
 

方式二【成功】

通过export来设置GPU的可见性,代码如下:

export TRANSFORMERS_OFFLINE=1
export HF_DATASETS_OFFLINE=1
export CUDA_VISIBLE_DEVICES=1,2
export CUDA_DEVICE_ORDER=PCI_BUS_ID
nohup python data_train.py > log/log.txt 2>&1 &

设置CUDA_VISIBLE_DEVICES=1,2,表示只使用1号和2号GPU

使用ps-ef |grep python找到我程序对应的进程号,进程号为:27378

再通过使用nvidia-smi来查看GPU的使用情况:

从上图中可以很明显的看到进程27378使用的是1号和2号卡

困惑:

1、为什么通过使用导入os来设置环境变量无法达到目的,而使用Linux的export却可以?

更多推荐

【C++】C++ 引用详解 ③ ( 函数返回值不能是 “ 局部变量 “ 的引用或指针 | 函数内的 “ 局部变量 “ 的引用或指针做函数返回值无意义 )

文章目录一、函数返回值不能是"局部变量"的引用或指针1、引用通常做右值2、函数返回值特点3、函数内的"局部变量"的引用或指针做函数返回值无意义二、代码示例-"局部变量"引用或指针做函数返回值测试一、函数返回值不能是"局部变量"的引用或指针1、引用通常做右值之前使用引用时,都是作为右值使用,引用只在声明的同时进行初始化时

ChatGPT可以取代搜索引擎吗?

目录ChatGPT可以取代搜索引擎吗?1、功能和应用场景2、处理的信息量3、实时性4、准确性5、使用习惯和依赖性未来发展趋势1、搜索引擎与ChatGPT的融合2、个性化搜索与自然语言处理3、搜索引擎作为对话平台4、增强现实与搜索引擎ChatGPT是一种大规模的预训练模型,旨在生成自然语言文本,以便在各种自然语言处理任务

【2023,学点儿新Java-51】变量与运算符 (阶段性复习3):常用运算符回顾之比较运算符、逻辑运算符、条件运算符、了解位运算符

前情提要:【2023,学点儿新Java-50】阶段性章节复习:String类的使用以及与基本数据类型变量间的运算|认识进制|常用运算符回顾之算术运算符、赋值运算符【2023,学点儿新Java-49】变量与运算符(阶段性复习2):基本数据类型变量的使用,基本数据类型变量间的运算规则【2023,学点儿新Java-48】变量

前端html原生页面兼容多端H5和移动端适配方案

目录图片代码最后图片是一个注册页面代码自己查看效果注意:单位全部用rem这样才能保证兼容性适配多端,px转rem转换公式1px=1/37.5rem所以想要20px应该对应20/37.5=0.53rem<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><met

【数据结构】时间、空间复杂度

⭐作者:小胡_不糊涂🌱作者主页:小胡_不糊涂的个人主页📀收录专栏:浅谈数据结构💖持续更文,关注博主少走弯路,谢谢大家支持💖时间、空间复杂度1.算法效率3.时间复杂度3.1时间复杂度的概念3.2大O的渐进表示法3.3推导大O阶方法3.4常见时间复杂度计算举例4.空间复杂度1.算法效率算法效率分析分为两种:第一种是

CPP-Templates-2nd--第 24 章 类型列表(Typelists)

目录24.1类型列表剖析(AnatomyofaTypelist)24.2类型列表的算法24.2.1索引(Indexing)24.2.2寻找最佳匹配24.2.3向类型类表中追加元素24.2.4类型列表的反转24.2.5类型列表的转换24.2.6类型列表的累加(AccumulatingTypelists)24.2.7插入排

python --windows自定义截图(并返回位置信息)

依赖:opencv-python4.0.0.21pyscreenshot3.1importcv2importpyscreenshotasImageGrabimportnumpyasnpimportwin32clipboardimportwin32conimportwin32guiimportpygetwindowasg

聚观早报 | iPhone 15系列正式发布;月饼专利申请超10000项

【聚观365】9月14日消息iPhone15系列正式发布月饼专利申请超10000项“五个女博士”自建研究院2023中国民营企业研发十强公布华为和小米达成全球专利交叉许可协议iPhone15系列正式发布2023年苹果秋季新品发布会如期而至。发布会上,苹果发布了iPhone15系列智能手机,以及AppleWatchSeri

使用Java将PPT、PPTX和PDF转换为图片

从Office到图片—使用Java实现文件格式转换PDF转图片1.万事第一步2.撸代码PPT/PPTX转图片1.万事第一步2.撸代码验收一下最近小雨遇到了一个需求,需要在前端小程序中嵌入展示Office文件的功能。然而,前端使用开源组件进行在线预览会导致性能消耗较大的问题(转半天圈圈)。产品理想的效果是用户上传Offi

《软件方法》第1章2023版连载(01)

DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集决定把第8章一部分关于“伪创新”的内容移到第1章,因此此次也更新第1章。第1章建模和UML牵着你走进傍晚的风里,看见万家灯火下面平凡的秘密。《情歌唱晚》;词:黄群,曲:黄群,唱:曹崴;19941.1利润=需求-设计1.1.1利润=需求-

什么是浏览器的同源策略(same-origin policy)?它对AJAX有什么影响?

聚沙成塔·每天进步一点点⭐专栏简介⭐浏览器的同源策略(Same-OriginPolicy)⭐同源策略对AJAX的影响⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一

热文推荐