【问题标题】:Simple PySpark BigDL test: Optimizer fails简单的 PySpark BigDL 测试:优化器失败
【发布时间】:2018-02-28 21:58:57
【问题描述】:

在 PySpark 本地节点中运行 BigDL 示例:https://bigdl-project.github.io/0.4.0/#ProgrammingGuide/optimization/

from bigdl.nn.layer import Linear
from bigdl.util.common import *
from bigdl.nn.criterion import MSECriterion
from bigdl.optim.optimizer import Optimizer, MaxIteration
import numpy as np

sc = SparkContext(appName="simple",conf=create_spark_conf())
init_engine()

model = Linear(2, 1)
samples = [
  Sample.from_ndarray(np.array([5, 5]), np.array([2.0])),
  Sample.from_ndarray(np.array([-5, -5]), np.array([-2.0])),
  Sample.from_ndarray(np.array([-2, 5]), np.array([1.3])),
  Sample.from_ndarray(np.array([-5, 2]), np.array([0.1])),
  Sample.from_ndarray(np.array([5, -2]), np.array([-0.1])),
  Sample.from_ndarray(np.array([2, -5]), np.array([-1.3]))
]

train_data = sc.parallelize(samples, 1)
optimizer = Optimizer(model, train_data, MSECriterion(), MaxIteration(100), 4)
optimizer.optimize()
model.get_weights()[0]

导致以下异常。其他然后 B​​igDL 测试在 PySpark 中工作。环境:openjdk 版本“1.8.0_141,Python 3.5.3(默认,2017 年 1 月 19 日,14:11:04) [GCC 6.3.0 20170118] 在 Linux 上

有什么想法吗? BigDL 是一个活跃的项目,并积极维护吗?

Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
    2018-02-28 22:40:20 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2018-02-28 22:40:20 WARN  Utils:66 - Your hostname, dk resolves to a loopback address: 127.0.1.1; using 10.0.2.15 instead (on interface enp0s3)
2018-02-28 22:40:20 WARN  Utils:66 - Set SPARK_LOCAL_IP if you need to bind to another address
2018-02-28 22:40:24 WARN  SparkContext:66 - Using an existing SparkContext; some configuration may not take effect.
cls.getname: com.intel.analytics.bigdl.python.api.Sample
BigDLBasePickler registering: bigdl.util.common  Sample
cls.getname: com.intel.analytics.bigdl.python.api.EvaluatedResult
BigDLBasePickler registering: bigdl.util.common  EvaluatedResult
cls.getname: com.intel.analytics.bigdl.python.api.JTensor
BigDLBasePickler registering: bigdl.util.common  JTensor
cls.getname: com.intel.analytics.bigdl.python.api.JActivity
BigDLBasePickler registering: bigdl.util.common  JActivity
disableCheckSingleton is deprecated. Please use bigdl.check.singleton instead
                                                                                                                                                                                                                                                                                                                                                                        /usr/local/lib/python3.5/dist-packages/bigdl/util/engine.py:41: UserWarning: Find both SPARK_HOME and pyspark. You may need to check whether they match with each other. SPARK_HOME environment variable is set to: /opt/spark, and pyspark is found in: /usr/local/lib/python3.5/dist-packages/pyspark/__init__.py. If they are unmatched, please use one source only to avoid conflict. For example, you can unset SPARK_HOME and use pyspark only.
warnings.warn(warning_msg)
Prepending /usr/local/lib/python3.5/dist-packages/bigdl/share/conf/spark-bigdl.conf to sys.path
creating: createLinear
creating: createMSECriterion
creating: createMaxIteration
creating: createDefault
creating: createSGD
creating: createDistriOptimizer
Traceback (most recent call last):
  File "simple.py", line 22, in <module>
    optimizer.optimize()
  File "/usr/local/lib/python3.5/dist-packages/bigdl/optim/optimizer.py", line 591, in optimize
    jmodel = callJavaFunc(get_spark_context(), self.value.optimize)
  File "/usr/local/lib/python3.5/dist-packages/bigdl/util/common.py", line 590, in callJavaFunc
    result = func(*args)
  File "/usr/local/lib/python3.5/dist-packages/py4j/java_gateway.py", line 1133, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "/usr/local/lib/python3.5/dist-packages/py4j/protocol.py", line 319, in get_return_value
    format(target_id, ".", name), value)
py4j.protocol.Py4JJavaError: An error occurred while calling o48.optimize.
: java.lang.ExceptionInInitializerError
    at com.intel.analytics.bigdl.optim.DistriOptimizer.optimize(DistriOptimizer.scala:860)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:280)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:214)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException
    at java.util.concurrent.ThreadPoolExecutor.<init>(ThreadPoolExecutor.java:1314)
    at java.util.concurrent.ThreadPoolExecutor.<init>(ThreadPoolExecutor.java:1237)
    at java.util.concurrent.Executors.newFixedThreadPool(Executors.java:151)
    at com.intel.analytics.bigdl.parameters.AllReduceParameter$.<init>(AllReduceParameter.scala:47)
    at com.intel.analytics.bigdl.parameters.AllReduceParameter$.<clinit>(AllReduceParameter.scala)
    ... 12 more

【问题讨论】:

    标签: python apache-spark pyspark bigdl


    【解决方案1】:

    是的,BIGDL 正在积极维护中。定义 bigdl 模型的正确方法是使用 sequential APIfunctional API
    顺序 API

    model = Sequential()
    model.add(Linear(...))
    model.add(Sigmoid())
    model.add(Softmax())  
    

    函数式 API

    linear = Linear(...)()
    sigmoid = Sigmoid()(linear)
    softmax = Softmax()(sigmoid)
    model = Model([linear], [softmax])
    

    here

    【讨论】:

    • 谢谢,但这并不能回答我的问题:为什么我在此处发布的 BigDL 网站的示例失败了?
    【解决方案2】:

    我自己刚开始使用 BigDL。我使用 PySpark 并注意到即使是默认函数调用也会失败。我从字面上挖掘了源代码,阅读了那里的文档,然后根据我阅读的内容改变了我调用它的方式。

    您也可以这样做。从您发布的错误来看,它似乎不喜欢将某些参数传递给它。这与其说是“你”问题,不如说是“代码不符合文档”问题。

    【讨论】:

      猜你喜欢
      • 2020-10-29
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多