これはおそらくあなたの /proc/mount
が原因です ファイルに 512 文字を超える行が含まれているため、OpenMPI の hwloc モジュールが正しく解析できません。 Docker は /proc/mounts
に非常に長い行を入れる傾向があります . openmpi-1.10.7/opal/mca/hwloc/hwloc191/hwloc/src/topology-linux.c:1677
でバグを確認できます :
static void
hwloc_find_linux_cpuset_mntpnt(char **cgroup_mntpnt, char **cpuset_mntpnt, int fsroot_fd)
{
#define PROC_MOUNT_LINE_LEN 512
char line[PROC_MOUNT_LINE_LEN];
FILE *fd;
*cgroup_mntpnt = NULL;
*cpuset_mntpnt = NULL;
/* ideally we should use setmntent, getmntent, hasmntopt and endmntent,
* but they do not support fsroot_fd.
*/
fd = hwloc_fopen("/proc/mounts", "r", fsroot_fd);
if (!fd)
return;
これは、PROC_MOUNT_LINE_LEN
の値を増やすことで修正できます。 ただし、これは一時的な回避策と見なす必要があります。
この問題は、1.11.3 (2 年前にリリース) 以降の hwloc で修正される必要があります。 hwloc 1.11.7>=1.11.3 を含む OpenMPI 3.0 にアップグレードできます。または、OpenMPI を再コンパイルして、古い組み込み hwloc の代わりに外部 hwloc を使用します。