求教一个使用 parallel Python 的问题

2018-12-03 09:35:43 +08:00
 acone2003
最近在学习使用 parallel python 模块进行分布式机器学习,遇到了一个问题:写了一个创建学习模型的函数,是分发到各计算节点上的,如下面的代码所示。Param 是一个字典,用于传送要构建模型的宏参数,当我不使用它使用默认的参数时,能够正常工作;当把两个#号去掉,使用传过来的参数时,就不能正常工作了。问一下我的代码错在了哪里?

ModelName = "LGBMRegressor"
params = { "max_depth": 1, "num_leaves": 4}

def CreateModel( ModelName, Params ):
max_depth, num_leaves = 10, 20
#if "max_depth" in Params: max_depth = Params[ "max_depth" ]
#if "num_leaves" in Params: num_leaves = Params[ "num_leaves" ]

Model, IsClassifier = None, True
ModelName = ModelName.lower()
if ModelName == "lgbmregressor":
IsClassifier = False
Model = lightgbm.LGBMRegressor( max_depth=max_depth, num_leaves=num_leaves )
return Model, IsClassifier

另外我若在本地创建好模型,把模型分发给各计算节点,程序就不能正常工作,如果在节点上创建模型,如上所示,就出现了上面的情况,该怎么解决?
2627 次点击
所在节点    Python
13 条回复
acone2003
2018-12-03 09:38:00 +08:00
各位请注意,代码传上去之后没有缩进了,实际上是有的
imn1
2018-12-03 09:47:32 +08:00
大小写
sanxidiot
2018-12-03 09:59:26 +08:00
希望 v2 能改善一下对代码显示的支持吧,毕竟好歹也是程序员技术社区啊
GoLand
2018-12-03 10:31:40 +08:00
@sanxidiot 发帖能用 Markdown,评论能用 gist ?还不完善??
zhangchioulin
2018-12-03 10:32:03 +08:00
@sanxidiot #3 markdown 不行么。。。都说了是‘程序员技术社区’,那么 markdown 应该都会一点吧。。。就算不会也可以编辑器写完复制进来吧
XIVN1987
2018-12-03 10:35:50 +08:00
@GoLand
@zhangchioulin
markdown 会用,,gist 第一次听说,,话说不能发帖、评论都用 markdown 吗??
zhangchioulin
2018-12-03 10:39:00 +08:00
@XIVN1987 #6 评论涉及到代码就‘ gist ’了吧。发帖 markdown 可用可不用,没有人强制要用 md,但是为了看的更清晰最好还是用 md 吧
sanxidiot
2018-12-03 10:44:20 +08:00
@zhangchioulin @GoLand 是我孤陋寡闻了,主要是看很多帖子都是直接复制代码,使得排版全无,以为没这些东西的...
ant2017
2018-12-03 10:52:39 +08:00
if 语句格式不是要换行?
if "max_depth" in Params:
max_depth = Params[ "max_depth" ]
wwg1994
2018-12-03 11:02:11 +08:00
不能正常工作是 python 报错还是结果不符合预期?
imn1
2018-12-03 13:46:47 +08:00
@ant2017
@wwg1994
他前面定义的是小写,后面判断用的是大写,是两个变量
acone2003
2018-12-03 13:51:45 +08:00
回 ant2017:换行也不行,试了。
回 wwg1994: 不是 python 报错,是不出结果。并且 CPU 占用率是 0
acone2003
2018-12-03 16:04:37 +08:00
各位有点新进展,我把函数添加了一项,然后使用 xgboost 就没有问题。是不是 lightGBM 要依赖一些别的模块? parallel Python 要求把必要的引用显式地写在代码中。添加后的相关代码如下:

def CreateModel( ModelName, Params ):
max_depth, num_leaves, min_child_weight = 10, 20, 1
if "max_depth" in Params: max_depth = Params[ "max_depth" ]
if "num_leaves" in Params: num_leaves = Params[ "num_leaves" ]
if "min_child_weight" in Params: min_child_weight = Params[ "min_child_weight" ]

Model, IsClassifier = None, True
ModelName = ModelName.lower()
if ModelName == "lgbmregressor":
IsClassifier = False
Model = lightgbm.LGBMRegressor( max_depth=max_depth, num_leaves=num_leaves )
elif ModelName == "xgbregressor":
IsClassifier = False;
Model = xgboost.XGBRegressor( n_jobs=16, max_depth=max_depth, min_child_weight=min_child_weight )
return Model, IsClassifier

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/513692

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX