首页 > 其他分享 >Jax中关于Device ID的配置

Jax中关于Device ID的配置

时间:2024-11-05 16:41:52浏览次数:3  
标签:Jax jax import Device 显卡 ID

问题背景

在不同的框架中对于Device ID的配置方法都略有不同,这里提两种Jax中配置Device ID的方法。

配置环境变量

这个方法是比较流行的,直接在环境变量里面配置:

export CUDA_VISIBLE_DEVICES=1

这样就使得当前shell下运行的程序只能识别到1号显卡,一般就是第二张显卡了。如果需要配置多张显卡,类似的可以指定:

export CUDA_VISIBLE_DEVICES=0,1

当然,如果是在Python程序中运行的话,也可以直接在Python脚本中配置环境变量:

import os
os.environ['CUDA_VISIBLE_DEVICES']='1'

当然,该语句最好在Jax初始化之前执行。

Jit-device参数配置

这种配置方法会更加具体一点,可以直接指定某个即时编译的函数所使用的device id,如下是一个使用的案例:

import os
# 禁用显存预分配
os.environ['XLA_PYTHON_CLIENT_PREALLOCATE']='false'
import time
import numpy as np
np.random.seed(0)
import jax
from jax import numpy as jnp
# 创建CPU上的张量
N = 5000000
crd = np.random.random((N, 3))
# 生成显卡对应的对象
gpus = jax.devices()
# 分配对象到不同的显卡上
crd0 = jax.jit(jnp.array, device=gpus[0])(crd[:3000000])
crd1 = jax.jit(jnp.array, device=gpus[1])(crd[3000000:])
time.sleep(5)

在这个案例中,我们在CPU上初始化一个crd张量,然后通过jax.numpy.array函数将该张量拷贝到指定的GPU环境中。其中向显卡第一张显卡拷贝了3000000组数据,向第二张显卡拷贝了2000000组数据,这样的话如果在nvidia-smi中就可以看到两个不同的显存占用了。

总结概要

本文主要介绍了2个在Jax框架中配置显卡Device ID的方法。第一种方法可以使用环境变量进行配置,对于众多的深度学习框架都是可以兼容的。而第二种方案是在Jax即时编译的过程中通过Jax生成的Device对象来控制数据的传输和函数执行的Device ID。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/jax-device-id.html

作者ID:DechinPhy

更多原著文章:https://www.cnblogs.com/dechinphy/

请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

参考链接

  1. https://github.com/jax-ml/jax/discussions/15957

标签:Jax,jax,import,Device,显卡,ID
From: https://www.cnblogs.com/dechinphy/p/18528257/jax-device-id

相关文章

  • 推荐一款功能强大的视频修复软件:Apeaksoft Video Fixer
    ApeaksoftVideoFixer是一款功能强大的视频修复软件,专门用于修复损坏、不可播放、卡顿、画面失真、黑屏等视频问题。只需提供一个准确且有效的样本视频作为参考,该软件就能将受损视频修复到与样本视频相同的质量。该软件目前支持MP4、MOV、3GP等格式的视频修复,并且还支持4K、8K......
  • 关于idea连接数据库时报错:Cannot run program E:\IntelliJ_IDEA_2023.3.4\jbr\bin
    问题说明连接mysql数据库时在点击testconnection时弹出的问题:CannotrunprogramE:\IntelliJ_IDEA_2023.3.4\jbr\bin\javacreateprocesserror=5,拒绝访问查询多个网站都没有找到解决方案。解决方法点击左侧Drivers,找到MySQL右侧点击Advanced在最下方的VMhome......
  • aria-hidden属性与页面交互问题
    1.背景与问题1.背景页面中表格有60多条数据,在不做分页处理的情况下,设置表格的最大高度,展示滚动条。2.问题在对前二十条已经展示在页面上的数据进行操作时,没有问题。滚动表格展示出新数据时,对数据进行操作,会有如图报错。并且对于新数据的操作并不生效。2.aria-hidden属性......
  • IntelliJ IDEA的快捷键
        IntelliJIDEA是一个非常强大的集成开发环境,它提供了大量的快捷键来加速开发者的日常工作。这里为您整理了一份IntelliJIDEA的快捷键大全,包含了编辑、导航、重构、运行等多个方面的快捷键。请注意,这些快捷键是基于Windows版本的IntelliJIDEA,对于macOS用户......
  • Android JetPack Compose MVI 框架
    学习基础布局完成后基本的布局层面可以实现了但是只学习静态的页面肯定是不行的要让我们的页面灵活动态的我们来学习一下网络请求获取数据谈及框架并不陌生MVI框架核心原理知识Model:表示应用的状态和业务逻辑。通常是不可变的,描述当前视图所需的数据。View:负责展......
  • 揭秘TF-IDF:从理论到实践,一文掌握文本分析的核心技术!
     欢迎关注我......
  • UE中基于FluidFlux插件实现洪水数据接入的一种思路
    这是FluidFlux插件文档链接:http://imaginaryblend.com/2021/09/26/fluid-flux/FluidFlux插件原本可以在编辑器模式下,通过右键SimulationDomain保存模拟状态,这个模拟状态保存后是一个资产文件以及三张纹理图Ground,Height,Velocity。SimulationDomain中有一个俯视的场景捕获相......
  • DevExpress WinForms中文教程:Data Grid - 如何在设计时创建和管理列?
    本教程介绍如何在网格设计器中做以下事情:创建列并将其绑定到数据字段。为数据源中的所有数据字段创建列。移除列。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用......