You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ipcluster与MPI启用超线程?

问题与解决方法

问题描述

我正在用MPI引擎启动IPython集群,在多进程环境下运行Jupyter Notebook,当前使用的命令是:

ipcluster start --engines=MPI -n 6 --profile=mpi

这台机器有6个物理核心,所以上面的命令能正常运行。但我想利用它的12个硬件线程,请问怎么让IPython/ipcluster命令启用超线程——也就是给它调用的mpirun/mpiexec命令传递--use-hwthread-cpus参数?

尝试启动12个引擎时的错误日志

2023-01-06 14:01:35.586 [IPClusterStart] 使用<class 'ipyparallel.cluster.launcher.MPIEngineSetLauncher'>启动12个引擎
2023-01-06 14:01:35.688 [IPClusterStart] 警告 | 引擎组已停止 1673010095: {'exit_code': 1, 'pid': 187667, 'identifier': 'ipengine-1673010095-187622'}
2023-01-06 14:01:35.689 [IPClusterStart] 错误 | 
            引擎提前关闭,大概率是连接失败。

            请检查引擎日志文件查看输出。

            如果控制器和引擎不在同一台机器上,你可能需要让控制器监听localhost之外的接口。

            可以通过在ControllerLauncher.controller_args中添加"--ip=*"来设置。

            在让控制器监听公网接口前,请务必阅读安全文档。
            
2023-01-06 14:01:35.690 [IPClusterStart] 错误 | 引擎输出:
Invalid MIT-MAGIC-COOKIE-1 key--------------------------------------------------------------------------
系统没有足够的可用slot来满足应用请求的12个slot:

  /****/venv/bin/python

请减少应用请求的slot数量,或者增加可用slot数量。

"slot"是Open MPI的术语,指可分配用于启动进程的单元。可用slot数量由Open MPI运行的环境决定:

  1. 主机文件,通过"slots=N"子句(如果未指定,N默认等于物理核心数)
  2. --host命令行参数,通过主机名后的":N"后缀(如果未指定,N默认是1)
  3. 资源管理器(如SLURM、PBS/Torque、LSF等)
  4. 如果没有主机文件、--host参数或资源管理器,Open MPI默认使用物理核心数

在以上所有情况下,如果你想让Open MPI默认使用硬件线程数而非物理核心数,请使用--use-hwthread-cpus选项。

另外,你也可以使用--oversubscribe选项,在决定启动进程数量时忽略可用slot的限制。
--------------------------------------------------------------------------

2023-01-06 14:01:35.690 [IPClusterStart] 错误 | IPython集群:正在停止
2023-01-06 14:01:35.691 [IPClusterStart] 正在停止控制器
2023-01-06 14:01:35.691 [IPController] 严重 | 收到信号15,正在关闭
2023-01-06 14:01:35.692 [IPController] 严重 | 正在终止子进程...
2023-01-06 14:01:35.816 [IPClusterStart] 控制器已停止:{'exit_code': 0, 'pid': 187624, 'identifier': 'ipcontroller-187622'}
2023-01-06 14:01:35.816 [IPClusterStart] 正在停止引擎:1673010095

解决方法

要让ipcluster给底层MPI命令传递--use-hwthread-cpus参数,有两种可行方式:

方式1:命令行直接指定

启动集群时,用--engine-args参数把MPI选项传递进去,命令如下:

ipcluster start --engines=MPI -n 12 --profile=mpi --engine-args="--use-hwthread-cpus"

这个参数会将指定的选项转发给mpirun/mpiexec,让Open MPI识别所有硬件线程作为可用slot。

方式2:修改配置文件永久生效

如果需要每次启动都自动启用该参数,可以修改IPython集群的配置文件:

  1. 找到mpi配置文件目录,通常是~/.ipython/profile_mpi/
  2. 编辑ipcluster_config.py,添加或修改以下配置项:
c.MPIEngineSetLauncher.mpi_args = ["--use-hwthread-cpus"]

保存后,直接用ipcluster start --engines=MPI -n 12 --profile=mpi启动即可。

注意:虽然可以用--oversubscribe参数强制绕过slot限制,但这种方式可能导致性能下降,优先推荐使用--use-hwthread-cpus来正确识别硬件线程。

内容的提问来源于stack exchange,提问作者weidler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:05:17