Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
dcff115e
MegEngine
项目概览
MegEngine 天元
/
MegEngine
1 年多 前同步成功
通知
403
Star
4705
Fork
582
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
MegEngine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
dcff115e
编写于
4月 13, 2021
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(distributed/launcher): fetch data early to avoid dead lock in launcher
GitOrigin-RevId: 9abcc956efc3e208a206d015e6e8d1a28b7d43cd
上级
7e22e9f0
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
18 addition
and
6 deletion
+18
-6
imperative/python/megengine/distributed/launcher.py
imperative/python/megengine/distributed/launcher.py
+14
-3
imperative/python/test/unit/distributed/test_distributed.py
imperative/python/test/unit/distributed/test_distributed.py
+4
-3
未找到文件。
imperative/python/megengine/distributed/launcher.py
浏览文件 @
dcff115e
...
...
@@ -114,6 +114,7 @@ class launcher:
procs
[
dev
].
terminate
()
devs
.
clear
()
result_count
=
0
while
len
(
devs
)
>
0
:
left
=
[]
# check all processes in one second
...
...
@@ -129,11 +130,21 @@ class launcher:
),
"subprocess {} exit with code {}"
.
format
(
dev
+
self
.
rank_start
,
code
)
if
code
==
None
:
left
.
append
(
dev
)
elif
queue
.
empty
():
get_logger
().
warning
(
WARN_SUBPROCESS_EXIT_WITHOUT_RETURN
)
else
:
# DO NOT delete it, multiprocess.Queue has small buffer
# fetch data early to avoid dead lock
if
not
queue
.
empty
():
result_count
+=
1
dev
,
ret
=
queue
.
get_nowait
()
results
[
dev
]
=
ret
devs
=
left
while
not
queue
.
empty
():
result_count
+=
1
dev
,
ret
=
queue
.
get_nowait
()
results
[
dev
]
=
ret
if
result_count
<
self
.
n_gpus
:
get_logger
().
warning
(
WARN_SUBPROCESS_EXIT_WITHOUT_RETURN
)
return
results
imperative/python/test/unit/distributed/test_distributed.py
浏览文件 @
dcff115e
...
...
@@ -199,13 +199,14 @@ def test_param_pack_concat():
@
pytest
.
mark
.
require_ngpu
(
2
)
@
pytest
.
mark
.
parametrize
(
"early_return"
,
[
False
,
True
],
ids
=
[
"common"
,
"early_return"
])
@
pytest
.
mark
.
parametrize
(
"output_size"
,
[
10
,
10000
],
ids
=
[
"small_size"
,
"large_size"
])
@
pytest
.
mark
.
isolated_distributed
def
test_collect_results
(
early_return
):
def
test_collect_results
(
early_return
,
output_size
):
@
dist
.
launcher
def
worker
():
if
early_return
:
exit
(
0
)
return
(
dist
.
get_rank
(),
dist
.
get_world_size
())
return
[
dist
.
get_rank
()]
*
output_size
results
=
worker
()
world_size
=
len
(
results
)
...
...
@@ -213,6 +214,6 @@ def test_collect_results(early_return):
expects
=
(
[
None
]
*
world_size
if
early_return
else
[
(
dev
,
world_size
)
for
dev
in
range
(
world_size
)]
else
[
[
dev
]
*
output_size
for
dev
in
range
(
world_size
)]
)
assert
results
==
expects
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录