如何使用linux服务器多核跑程序和unhashable type: ‘list‘报错的解决方案

news2024/9/25 3:18:35

问题描述

在使用服务器多核跑程序的时候,需要把核心的程序抽取出来,然后提供迭代参数。然后就可以使用多核去跑程序了。但是在执行的过程中报错如下:

Exception has occurred: TypeError

unhashable type: 'list'

File "/home/LIST_2080Ti/njh/CHB-MIT-DATA/epilepsy_eeg_classification/preprocessing.py", line 396, in <module> p.map(data_pro, namelista) TypeError: unhashable type: 'list'

解决方案

我把上面的namelist转换为tuple也不行,仍旧是如上报错。

转换语句为:

namelista = tuple(namelist)

并且也测试了类型,但是,就是报相同的错。

搞了几个小时都不行。

昨天弄到凌晨五点半都没弄好。

但是,今天下午一过来,仔细检查了程序,发现,原来我的程序中还有其它的没有转换为tuple的list。

你仔细检查会发现,一旦需要送入到处理器去,就需要把所有相关的list都转换为tuple才行。否则仍旧会报一样的错。

从昨天的晕头转向到今天的一句程序搞定,真的是颇有戏剧性。增加的就是这么一句。

 前面声明的数据是list类型,仍旧需要变换为tuple,否则会报错。但是这次报错不会直接指示到这里,只会定位到这一句。

p.map(data_pro, namelista)

然后程序就跑起来了。%CPU一栏就是使用的核数。这是用了15核,防止用的太多,别人没得用,毕竟服务器不是自己一个人的。一个核就是100%,15核,就是1500%。

使用top就可查看服务器的使用情况。

top

下面的主要参数是第三行%Cpu(s) 第一个us项目是使用的CPU占总CPU的比例,第四个id是剩余的CPU占比。在没有使用这个多核程序的时候,我的id能达到97.9%。现在这说明已经成功的用上了多核。

想要知道电脑的核数。所以我的电脑就是1个物理CPU,2核3线程(逻辑CPU)。

核数
(cat) C:\Users\asus>cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores       : 2

物理CPU数

(cat) C:\Users\asus>cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
1

逻辑CPU数
(cat) C:\Users\asus>cat /proc/cpuinfo| grep "processor"| wc -l
3

更linux相关的命令看这个:linux服务器信息查询命令_ACMSunny的博客-CSDN博客

想看使用多核与单核跑程序的区别,看这个图:

 程序并发执行,差不多是原来15倍的差距。原来的需要跑两个多月,现在估计5天就可以了。

 

分析总结

(1)使用多核的程序段

之所以这样干的目的是,使用多核跑程序预处理。

想要这样做的一个前提就是需要把核心程序抽取出来,然后把下面四句作为主程序就行。

from multiprocessing.pool import Pool

if __name__ == '__main__':
    with Pool(15) as p:
        p.map(data_pro, namelista)

上面程序中,15是使用的服务器核数,data_pro是处理的核心程序。namelist是需要迭代的次数。

特别需要注意的是,namelista必须是可哈希的。

否则会报错:unhashable type: 'list'

(2)python可哈希的列表

        Python中的hashable objects的例子:

                int, float, decimal, complex, bool, string, tuple, range, frozenset, bytes

        Python中的unhashable objects的例子:

                list, dict, set, bytearray, user-defined classes

(3)弯路

在没有检测出我前面的数据是list的时候,报错一直没有指示正确的位置,这导致我一直以为把namelist使用tuple转换后不起作用。

我之前还用了torch方法,但是不知道什么原因,这个方法对我没有用。

按照博主lei_qi所讲,安装了torch后,直接在你原有的程序上添加以下配置就能直接设置运行的线程数。但是我安装完了之后,再添加这些配置,重启vscode,但是cpu仍旧如之前一样没有任何变化。

限制或增加pytorch的线程个数!指定核数或者满核运行Pytorch!!!_lei_qi的博客-CSDN博客

import os

cpu_num = 1 # 这里设置成你想运行的CPU个数
os.environ ['OMP_NUM_THREADS'] = str(cpu_num)
os.environ ['OPENBLAS_NUM_THREADS'] = str(cpu_num)
os.environ ['MKL_NUM_THREADS'] = str(cpu_num)
os.environ ['VECLIB_MAXIMUM_THREADS'] = str(cpu_num)
os.environ ['NUMEXPR_NUM_THREADS'] = str(cpu_num)
torch.set_num_threads(cpu_num)

以下的参考文章给我了很大帮助,希望这个攻略能够给所有的朋友以帮助。如果本文不能解决你的问题,你也可以看看下面的资料。

这一篇可以说是简短精炼的讲了多核的使用方法:

Python多进程multiprocessing模块介绍 - 简书

这一篇讲了python速度慢的原因:

python速度慢的两大原因_happy_wealthy的博客-CSDN博客_python运行慢的原因

这篇讲了python提速方法:

3行代码,Python数据预处理提速6倍!(附链接)

这一篇是并行程序大总结:

python-16-python并行计算程序multiprocessing_皮皮冰燃的博客-CSDN博客_python并行计算

还有下面的文章都给了我很多启示和帮助,感谢这些文章的作者们。

参考文献

Python: TypeError: unhashable type: ‘list‘_笨牛慢耕的博客-CSDN博客_list unhashable

(1)CPU占比使用情况

Linux提高CPU使用率并设置固定占比_phubing的博客-CSDN博客_nohup dd if=/dev/zero of=/dev/null &

linux:如何指定进程运行的CPU - 疯子123 - 博客园

Linux top命令详解:持续监听进程运行状态

【python】详解multiprocessing多进程-Pool进程池模块(二)_brucewong0516的博客-CSDN博客_from multiprocessing import pool

深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析_是否龙磊磊真的一无所有的博客-CSDN博客_深度学习 显卡利用率不高

为什么你的程序跑不满CPU?——简单聊聊多核多线程_我我我只会printf的博客-CSDN博客_多核多线程

(2)限制程序运行线程数

限制或增加pytorch的线程个数!指定核数或者满核运行Pytorch!!!_lei_qi的博客-CSDN博客

Python 基本功: 14. 多核并行计算 - 知乎

CPU占满:pytorch常见问题之cpu占满 - 简书 

——————————————

(3)pytorch

https://www.cnblogs.com/bamtercelboo/p/7097933.html

pytorch训练占用cpu过高,num_works和set_num_threads设置均无效,发现是数据扩增的问题_林中化人的博客-CSDN博客_pytorch训练cpu占用率很高

_____________________________________

(4)多核、多进程、多线程

python 的多核利用_yuanzhoulvpi的博客-CSDN博客_python 多核

Python torch.set_num_threads方法代码示例 - 纯净天空

https://www.cnblogs.com/cc-world/p/14465202.html

Python多进程multiprocessing模块介绍 - 简书

python-16-python并行计算程序multiprocessing_皮皮冰燃的博客-CSDN博客_python并行计算


(5)pool

Python 多进程pool.map()方法的使用_埃菲尔没有塔尖的博客-CSDN博客_pool.map

Multiprocessing using Pool in Python

(6)GPU无法调用:

gpu无法调用解决方案记录_Takoony的博客-CSDN博客_iframe gpu无法调用

用GPU跑python代码_编程小飞的博客-CSDN博客_如何用显卡跑代码

(7)linux top监听

Linux top命令详解:持续监听进程运行状态

https://www.cnblogs.com/Chary/p/16394567.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/356431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习 深度学习】通俗讲解集成学习算法

目录&#xff1a;集成学习一、机器学习中的集成学习1.1 定义1.2 分类器(Classifier)1.2.1 决策树分类器1.2.2 朴素贝叶斯分类器1.2.3 AdaBoost算法1.2.4 支持向量机1.2.5 K近邻算法1.3 集成学习方法1.3.1 自助聚合(Bagging)1.3.2 提升法(Boosting)1.3.2.1 自适应adaboost1.3.3 …

【C语言编译器】02 Windows下 7 种C语言IDE的使用(万字长文警告,含Visual Studio多个版本)

目录一、Visual Studio1.1 VS 20101.2 VS 20151.21 简介1.22 使用1.3 VS 20171.31 简介1.32 使用1.4 VS 20191.41 简介1.42 使用1.5 VS 20221.6 VS 安全函数问题1.7 VS “无法查找或打开PDB文件” 问题二、CLion2.1 CLion简介及安装2.2 使用CLion编写C程序三、Dev C3.1 Dev C简…

【ubuntu 22.04不识别ch340串口】

这个真是挺无语的&#xff0c;发现国内厂商普遍对开源环境不感兴趣&#xff0c;ch340官方linux驱动好像被厂家忘了&#xff0c;现在放出来的驱动还是上古内核版本&#xff1a; 于是&#xff0c;驱动居然要用户自己编译安装。。还好网上有不少大神&#xff1a;链接&#xff0c;…

一起学 pixijs(3):Sprite

大家好&#xff0c;我是前端西瓜哥。今天来学习 pixijs 的 Sprite。 Sprite pixijs 的 Sprite 类用于将一些纹理&#xff08;Texture&#xff09;渲染到屏幕上。 Sprite 直译为 “精灵”&#xff0c;是游戏开发中常见的术语&#xff0c;就是将一个角色的多个动作放到一个图片…

零基础小白如何学会Java?

Java作为目前使用最广泛的编程语言&#xff0c;自身在常见的企业级业务应用程序以及Android应用程序等方面都有突出的表现。作为跨平台语言&#xff0c;具有安全性、易用性、通用性等特点&#xff0c;被特意设计用于互联网的分布式环境。 对于很多喜欢代码的小伙伴来说Java都是…

音乐播放器-- 以及数据库数据存储

运行环境 &#xff1a; java1.8 数据库以及代码编写工具 &#xff1a; sqlserver -- mysql 也可以 工具 eclipse 编码gbk窗体 &#xff1a; Swing使用了jaudiotagger 进行了音乐处理 图片展示 ----- 空闲时间 做出来玩的项目 部分功能还没有完善 完善了的功能 音乐 /// 主页 &a…

SheetJS的部分操作

成文时间&#xff1a;2023年2月18日 使用版本&#xff1a;"xlsx": "^0.18.5" 碎碎念&#xff1a; 有错请指正。 这个库自说自话升级到0.19。旧版的文档我记得当时是直接写在github的README上。 我不太会使用github&#xff0c;现在我不知道去哪里可以找到…

SpringMvc介绍。

目录 1、SpringMvc概述 1、基本介绍 2、工作流程 3、bean加载控制 二、请求 1、请求映射路径 2、请求方式 3、请求参数 4、请求参数&#xff08;传递json数据&#xff09; 5、日期类型参数传递 三、响应 四、REST风格 1、REST简介 2、RESTful入门案例 3、RESTfu…

信号完整性设计规则之串扰最小化

本文内容从《信号完整性与电源完整性分析》整理而来&#xff0c;加入了自己的理解&#xff0c;如有错误&#xff0c;欢迎批评指正。 1. 对于微带线和带状线&#xff0c;保持相邻信号路径的间距至少为线宽的2倍。 减小串扰的一种方式就是增大线间距&#xff0c;使线间距等于线…

GeniE 实用教程(三)属性

目 录一、前言二、材料属性三、截面属性3.1 梁横截面3.2 板壳厚度3.3 截面赋予四、截面偏置4.1 梁偏置4.2 板壳偏置五、局部轴方向5.1 梁的局部轴5.2 板壳的法向六、水力属性6.1 湿表面属性6.2 水动力参数七、参考文献一、前言 SESAM &#xff08;Super Element Structure Anal…

23 pandas Excel文件的拆分与合并

文章目录一个文件夹下多个工作簿的合并【单独Sheet】同一工作簿中多个Sheet合并ExcelWriter针对不同工作表的操作将一个工作表拆分成多个工作表将一个工作表拆分成多个工作簿一个文件夹下多个工作簿的合并【单独Sheet】 1把文件夹下所有的文件都遍历出来2循环读取文件放入一个…

【C++】再谈vscode界面调试C++程序(linux) - 知识点目录

再谈vscode界面调试C程序&#xff08;linux&#xff09; 配套文档&#xff1a;vscode界面调试C程序&#xff08;linux&#xff09; 命令解释 g -g ../main.cpp 编译main.cpp文件&#xff1b; -g&#xff1a;生成调试信息。编译器会在可执行文件中嵌入符号表和源代码文件名&…

程序员必备的技能-深入理解 Linux 内核拆解

841 页的《深入理解 Linux内核》堪称经典&#xff0c;时隔多年打开&#xff0c;泛黄的纸张上面仍然跳跃出一个个让人心潮澎湃的知识点&#xff0c;突然让我想起一位微信朋友的昵称&#xff1a;知识的舔狗&#xff01;拆&#xff0c;开始~前言第一章 绪论Linux与其他类Unix内核…

springmvc汽车企业公司网站的系统设计 java ssm

红旗汽车走进社区&#xff0c;走进生活&#xff0c;成为当今生活中不可缺少的一部分。随着汽车行业的发展&#xff0c;加强管理和规范管理司促进红旗汽车网站健康发展的重要推动力。在我国迎来良好的发展机遇&#xff0c;但同时也确实有许多问题的需要研究和探讨。系统主要完成…

pvs中pv显示[unknown]解决方法、正确剔除一个vg流程方法【不影响vg已有的lv数据】、vgs容量和硬盘容量显示不一致解决方法

文章目录pvs中pv显示[unknown]解决方法报错产生情况报错说明解决方法解决方法【无法修复情况&#xff0c;重要&#xff01;&#xff01;&#xff01;】解决方法【正常情况下】正常的剔除一个vg流程【不影响vg已有lv】环境准备强制剔除正常剔除vgs容量和硬盘容量显示不一致解决方…

Mr. Cappuccino的第42杯咖啡——Kubernetes之Pod控制器(一)

Kubernetes之Pod控制器Pod控制器介绍ReplicaSet弹性扩容弹性缩容使用scale命令进行扩容或者缩容更新镜像删除ReplicaSetDeployment弹性扩容与缩容删除Deployment更新镜像重建更新滚动更新版本回退Pod控制器介绍 Pod是Kubernetes集群中能够被创建和管理的最小部署单元。所以需要…

Beats:使用 fingerprint 来连接 Beats/Logstash 和 Elasticsearch

针对带有 HTTPS 访问的 Elasticsearch 集群来说&#xff0c;在我之前的很多文章&#xff0c;我都习惯于使用集群的证书来访问 Elasticsearch。你可以参考我之前的文章 “Elastic Stack 8.0 安装 - 保护你的 Elastic Stack 现在比以往任何时候都简单”。这是一种非常简便的方法。…

一文搞懂 DevOps

前言 DevOps作为一个热门的概念&#xff0c;近年来频频出现在各大技术社区和媒体的文章中&#xff0c;备受行业大咖的追捧&#xff0c;也吸引了很多吃瓜群众的围观。 那么&#xff0c;DevOps是什么呢&#xff1f; 有人说它是一种方法&#xff0c;也有人说它是一种工具&#…

github上传本地文件详细过程

repository 也就是俗称的仓库 声明&#xff1a;后续操作基于win10系统 前提&#xff1a;有一个github账号、电脑安装了git(官方安装地址) 目的&#xff1a; 把图中pdf文件上传到github上的个人仓库中 效果&#xff1a; 温馨提示&#xff1a; git中复制: ctrl insert&#xf…

【JavaWeb】一文学会JPA

✅✅作者主页&#xff1a;&#x1f517;孙不坚1208的博客 &#x1f525;&#x1f525;精选专栏&#xff1a;&#x1f517;JavaWeb从入门到精通&#xff08;持续更新中&#xff09; &#x1f4cb;&#x1f4cb; 本文摘要&#xff1a;本篇文章主要介绍JPA的概念、注解实现ORM规范…