使用modin.pandas读取数据集后Intel Dev Cloud服务器不可用问题
在Intel Dev Cloud使用Modin+OneAPI时服务器无响应的问题排查与解决
问题描述
在Intel Dev Cloud的JupyterLab环境中使用Intel OneAPI,尝试用Modin加速Pandas操作时遇到异常:
代码片段
第一个Jupyter代码块:
import modin.pandas as pd
第二个Jupyter代码块:
df = pd.read_csv('dataset/dataset.csv') df.head()
执行输出
运行第二个代码块时弹出以下警告,随后服务器直接无响应:
UserWarning: Ray execution environment not yet initialized. Initializing... To remove this warning, run the following python code before doing dataframe operations: import ray ray.init() 2023-09-01 12:00:16,471 INFO worker.py:1636 -- Started a local Ray instance.
直接使用import pandas as pd时代码运行正常,但Modin无法发挥作用,数据集为1GB的CSV文件。
重现步骤
- 进入Intel Dev Cloud OneAPI平台
- 点击「Getting Started」标签
- 下滑点击「launch JupyterLab」
- 创建ipynb文件,通过以下命令下载数据集:
!wget https://s3-ap-southeast-1.amazonaws.com/he-public-data/datasetab75fb3.zip
系统信息
- 操作系统:Linux 90-Ubuntu 5.4.0-80-generic
- CPU:Intel(R) Xeon(R) Gold 6128 CPU @ 3.40GHz
- 内存:188 GB
原因分析
- Ray自动初始化的资源过载:Modin默认以Ray作为分布式计算后端,首次执行DataFrame操作时会自动初始化Ray实例。但Intel Dev Cloud的JupyterLab环境存在进程资源限制,Ray初始化时默认尝试占用过多CPU、内存资源,直接导致服务器资源耗尽无响应。
- 依赖版本不兼容:Dev Cloud预装的Ray版本与Modin版本不匹配,初始化过程中触发隐性错误,导致服务挂起。
- 大文件读取的叠加负载:1GB的CSV文件在Ray初始化完成后,Modin的并行读取逻辑与环境存储IO限制冲突,进一步加剧资源占用。
解决方法
方法1:手动初始化Ray并限制资源参数
在导入Modin前手动初始化Ray,指定合理的资源配额,避免无限制占用资源:
import ray # 根据环境资源调整参数,示例限制为4核、16GB内存 ray.init(num_cpus=4, memory=16 * 1024 * 1024 * 1024) import modin.pandas as pd df = pd.read_csv('dataset/dataset.csv') df.head()
方法2:切换Modin后端为Dask
如果Ray在Dev Cloud环境中兼容性问题无法解决,可切换到Dask后端:
import os os.environ["MODIN_ENGINE"] = "dask" # 设置Modin使用Dask后端 import modin.pandas as pd df = pd.read_csv('dataset/dataset.csv') df.head()
方法3:升级依赖版本确保兼容
在JupyterLab中执行以下命令,同步Modin与Ray的版本:
!pip install --upgrade modin ray
方法4:优化CSV读取参数降低负载
针对大文件读取,通过指定参数减少内存消耗:
import modin.pandas as pd # 示例:指定列类型为category、关闭低内存模式 df = pd.read_csv('dataset/dataset.csv', dtype={'目标列名': 'category'}, low_memory=False) df.head()
内容的提问来源于stack exchange,提问作者Adarsh Wase
相关产品推荐
相关产品推荐

