首页 > 其他分享 >MindSpore报错处理:TypeError: For 'set_context', the parameter device_id can not be set repeate

MindSpore报错处理:TypeError: For 'set_context', the parameter device_id can not be set repeate

时间:2024-03-22 10:23:58浏览次数:22  
标签:origin set system 报错 context device import id

问题背景

在使用MindSpore运行一个分子动力学模拟的测试程序时:

from mindspore import context
from mindspore.nn import Adam

if __name__ == "__main__":
    import sys
    sys.path.insert(0, '../..')

    from sponge import Sponge, Molecule, ForceField, set_global_units
    from sponge.callback import WriteH5MD, RunInfo
    
    context.set_context(mode=context.GRAPH_MODE, device_target='GPU', device_id=1)
    set_global_units('nm', 'kj/mol')

    system = Molecule(template='water.spce.yaml')

    system.reduplicate([0.3, 0, 0])
    new_sys = system.copy([0, 0, -0.3])
    system.append(new_sys)

    potential = ForceField(system, parameters='SPCE')
    opt = Adam(system.trainable_params(), 1e-3)
    mini = Sponge(system, potential, opt)

    run_info = RunInfo(5)
    cb_h5md = WriteH5MD(system, 'tutorial_c01.h5md', save_freq=10, write_velocity=True, write_force=True)
    mini.run(10, callbacks=[run_info, cb_h5md])

遇到这样的一个报错:

Traceback (most recent call last):
  File "potential_cell_doc.py", line 11, in <module>
    context.set_context(mode=context.GRAPH_MODE, device_target='GPU', device_id=1)
  File "/home/dechin/anaconda3/envs/mindsponge/lib/python3.9/site-packages/mindspore/_checkparam.py", line 1313, in wrapper
    return func(*args, **kwargs)
  File "/home/dechin/anaconda3/envs/mindsponge/lib/python3.9/site-packages/mindspore/context.py", line 1493, in set_context
    ctx.setters[key](ctx, value)
  File "/home/dechin/anaconda3/envs/mindsponge/lib/python3.9/site-packages/mindspore/context.py", line 430, in set_device_id
    self.set_param(ms_ctx_param.device_id, device_id)
  File "/home/dechin/anaconda3/envs/mindsponge/lib/python3.9/site-packages/mindspore/context.py", line 175, in set_param
    self._context_handle.set_param(param, value)
TypeError: For 'set_context', the parameter device_id can not be set repeatedly, origin value [0] has been in effect.

----------------------------------------------------
- C++ Call Stack: (For framework developers)
----------------------------------------------------
mindspore/core/utils/ms_context.cc:477 CheckReadStatus

这里提示的是重复定义device_id的错误。但是实际上我通过vscode的文件检索功能,发现在整个程序引用中,并没有哪里调用到了这个device_id设置的位置。

解决思路

既然不是程序本身设置了device_id,那就是程序内部调用了MindSpore的组件去执行GPU相关的运算,或者是在JIT编译过程会自动指定device_id。那么问题解决的思路就很简单了,直接把设置device_id的这个内容放到文件的最前头,在编译和调用MindSpore进行运算之间就指定好device_id:

from mindspore import context
from mindspore.nn import Adam

if __name__ == "__main__":
    import sys
    sys.path.insert(0, '../..')

    from sponge import Sponge, Molecule, ForceField, set_global_units
    from sponge.callback import WriteH5MD, RunInfo
    
    context.set_context(mode=context.GRAPH_MODE, device_target='GPU', device_id=1)
    set_global_units('nm', 'kj/mol')

    system = Molecule(template='water.spce.yaml')

    system.reduplicate([0.3, 0, 0])
    new_sys = system.copy([0, 0, -0.3])
    system.append(new_sys)

    potential = ForceField(system, parameters='SPCE')
    opt = Adam(system.trainable_params(), 1e-3)
    mini = Sponge(system, potential, opt)

    run_info = RunInfo(5)
    cb_h5md = WriteH5MD(system, 'tutorial_c01.h5md', save_freq=10, write_velocity=True, write_force=True)
    mini.run(10, callbacks=[run_info, cb_h5md])

重新运行后结果如下:

[MindSPONGE] Started simulation at 2024-03-22 10:08:10
[MindSPONGE] Step: 5, E_pot: 100.10054
[MindSPONGE] Step: 10, E_pot: 89.08189
[MindSPONGE] Finished simulation at 2024-03-22 10:08:13
[MindSPONGE] Simulation time: 2.83 seconds.
--------------------------------------------------------------------------------

问题成果解决。

总结概要

本文主要介绍了一个在使用MindSpore框架进行编程的时候遇到的一个小问题--重复设定运算设备的编号。之所以会出现这个问题,是因为在调用的包里面有对MindSpore的引用,里面还包含了一些基于MindSpore的运算和即时编译,因此如果不给定设备编号的话,MindSpore内部会默认分配一个设备编号。而如果我们在自己的测试案例中又希望指定一个设备编号,那么就要把这个set_context句柄放在引用的最前面。

标签:origin,set,system,报错,context,device,import,id
From: https://www.cnblogs.com/dechinphy/p/18088814/context-error

相关文章

  • Redis第二课,1.set key value(设置对应的key和value)2.get key(得到value值)Redis全局
    Redis的启动 redis-cli目录1.setkeyvalue(设置对应的key和value)2.getkey(得到value值)Redis全局命令(支持很多的数据结构)3.keys(用来查询当前服务器匹配的key)生产环境/线上环境4.exist(判定key是否存在):判定key是否存在​编辑5.DEL  key 返回删掉的key......
  • 记一次Redis报错问题
    问题描述在Spring项目中使用了@Cacheable注解并且将缓存放入redis,当从Redis读取缓存时提示了反序列化异常,无法构造UnmodifiableMap,没有默认的构造函数CouldnotreadJSON:Cannotconstructinstanceof`org.apache.commons.collections4.map.UnmodifiableMap`(noCreators,......
  • hive 插入(insert)数据报错 解决办法
    异常信息:org.apache.hive.service.cli.HiveSQLException:Errorwhileprocessingstatement:FAILED:ExecutionError,returncode2fromorg.apache.hadoop.hive.ql.exec.mr.MapRedTask我的问题是:可以创建表,可以删除表,可以给表导入数据,可以查询数据,但是不能使用insert插入数......
  • requests.post传的data如果是直接使用python dict封装,有些服务端接收不了这种数据类型
    平时在自己的php项目里,使用dict方式组装data,然后requests.post,一点问题都没有。但是调了后端一个java的微服务接口,结果就一直报错422: 最后问了一下开发,得到提示“python好像还有个毛病,python的json对象转字符串的时候,转出来的字符串不是标准json字符串,还要做个字符串处理,变成......
  • pageX|pageY、clientX |clientY、offsetX|offsetY的区别
    一、pageX|pageY当鼠标点击、按下、移动时触发,可获取到该值。pageX|pageY:以页面左上角为基准点,相对于页面来说的。【当前鼠标触发点,距离页面左上角的距离,不会因为页面的滚动条的改变而改变】二、clientX|clientY当鼠标点击、按下、移动时触发,可获取到该值。pageX|pageY:以浏览器......
  • Xcode开发iOS运行项目报错symbol(s) not found for architecture x86_64的解决办法
    写在前边的话:如果是xcode13,那么请先升级系统到Monterey(ios12.7.4),并安装xcode14。因为好多sdk都是xcode14才有的,xcode13不支持,任你把buildsetting玩出花来都没用的。Xcode13的时候,各种报错百度搜索解决方法,各种配置buildsettings,然而没有什么用,真机/模拟器都是一一直报错。......
  • debian11 网卡报错carrier-changed
    起因今天中午12点多公司某台拥有双网卡(内网和外网)的debian11操作系统的机器内网IP地址发生了变化,经过询问都说没有人动过这台机器的IP地址。这让我感到十分疑惑,没有人改动怎么IP地址怎么还会变化呢?背景这台Debian11的操作系统拥有两张网卡,一张外网网卡,一张内网网卡。由于公......
  • 二 Superset通过API创建数据库连接和数据集
    Superset通过API创建数据库连接和数据集1登录Post登录http://localhost:8088/api/v1/security/loginBodyraw(json){"password":"123456","provider":"db","refresh":true,"username":"admi......
  • react router v6报错 useRoutes() may be used only in the context of a <Router> comp
    在使用reactrouterv6版本的时候,按照之前的方法使用src/main.tsx是这样的,几乎不动import*asReactfrom"react";import*asReactDOMfrom"react-dom/client";import"~/assets/index.css";importAppfrom"~/App.tsx";ReactDOM.createRoot(......
  • ES9200端口漏洞添加授权:es集群添加用户安全认证功能(Set up basic security for the E
    hR0wZPaaSHmi-slI0GAVMw文章目录引言I设置访问密码1.1每个集群节点都需要编辑elasticsearch.yml文件1.2生成elastic-certificates.p121.3重启ES集群1.4创建Elasticsearch集群密码1.5访问验证1.6kibana设置elasticsearch帐号密码1.7logstash......