当前位置: 首页 > news >正文

【解决方案】使用transformer指定显卡后,模型依然加载到默认第1张显卡上

问题描述

下面是这个问题的一个简化demo:

import torch
from transformers import AutoTokenizer,AutoModelForCausalLM
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '2,3' model_path = "..."model = AutoModelForCausalLM.from_pretrained(model_path,torch_dtype="auto",trust_remote_code=True,device_map="auto")tokenizer =  AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)

按理说指定了环境变量为后面几张显卡,模型会自动加载到我们指定的显卡上。可是查看gpu使用情况,发现还是加载在了第一张显卡上,这是为啥呢?

原因及解决方案

参考这篇博客:【踩坑】PyTorch中指定GPU不生效和GPU编号不一致问题 ,发现如果在代码里指定CUDA_VISIBLE_DEVICES的话,指定的位置一定要在所有引用torch的代码之前。上面是单个文件的例子,如果是多个文件互相引用,也是一样的道理。所以推荐在脚本入口的一开始就设置该环境变量:

# 在入口文件的一开始设置该环境变量。原则是它的设置一定要早于所有模块对torch的引用
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '2,3' 
import torch
from transformers import AutoTokenizer,AutoModelForCausalLMmodel_path = "..."model = AutoModelForCausalLM.from_pretrained(model_path,torch_dtype="auto",trust_remote_code=True,device_map="auto")tokenizer =  AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)

再查看显卡,模型会被自动加载到编号为2,3的两张显卡上。值得注意的是,若指定device_map = "auto",需要在环境中安装accelerate包。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Mybatis的注解开发学习笔记
  • 【香橙派系列教程】(六)嵌入式SQLite数据库
  • 【gpt预测与推理区别】
  • Apache Kylin与BI工具集成:数据可视化实战
  • 树的存储结构
  • 2024最简七步完成 将本地项目提交到github仓库方法
  • IPV6公网暴露下的OPENWRT防火墙安全设置(只允许访问局域网中指定服务器指定端口其余拒绝)
  • virtualbox7安装centos7.9配置静态ip
  • Java 并发编程:Java 线程池的介绍与使用
  • C# 串口通信(通过serialPort控件发送及接收数据)
  • Android 实现屏幕录制
  • GCKontrol-GCAir工具链在飞机功能系统设计中的应用
  • 安装 electron 报错解决
  • 你有GitHub Models,我有CSGHub和StarShip
  • 谷粒商城实战笔记-105~107-全文检索-ElasticSearch-入门
  • android图片蒙层
  • es6(二):字符串的扩展
  • JS数组方法汇总
  • LeetCode18.四数之和 JavaScript
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Promise初体验
  • vue的全局变量和全局拦截请求器
  • windows下mongoDB的环境配置
  • Zsh 开发指南(第十四篇 文件读写)
  • 前端学习笔记之观察者模式
  • 使用 @font-face
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​业务双活的数据切换思路设计(下)
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #WEB前端(HTML属性)
  • #单片机(TB6600驱动42步进电机)
  • (07)Hive——窗口函数详解
  • (day 12)JavaScript学习笔记(数组3)
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (七)Flink Watermark
  • (三)c52学习之旅-点亮LED灯
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转) ns2/nam与nam实现相关的文件
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • .NET 解决重复提交问题
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET企业级应用架构设计系列之技术选型
  • .net中调用windows performance记录性能信息
  • .net专家(高海东的专栏)
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • [ C++ ] STL---string类的模拟实现
  • []sim300 GPRS数据收发程序
  • [20150321]索引空块的问题.txt
  • [AIGC] HashMap的扩容与缩容:动态调整容量以提高性能