2017-09-12 7 views
0

Deeplearning4j 라이브러리를 사용하여 spark에 응용 프로그램을 빌드하려고합니다. spark-submit 명령을 사용하여 내 jar (intelliJ를 사용하여 빌드 됨)를 실행할 클러스터가 있습니다. 여기에 내가 IntelliJ에 내 코드를 볼 때 내 코드 여기스레드 "main"의 예외 java.lang.NoClassDefFoundError : org/deeplearning4j/nn/conf/layers/Layer

package Com.Spark.Examples 

import scala.collection.mutable.ListBuffer 
import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 
import org.canova.api.records.reader.RecordReader 
import org.canova.api.records.reader.impl.CSVRecordReader 
import org.deeplearning4j.nn.api.OptimizationAlgorithm 
import org.deeplearning4j.nn.conf.MultiLayerConfiguration 
import org.deeplearning4j.nn.conf.NeuralNetConfiguration 
import org.deeplearning4j.nn.conf.layers.DenseLayer 
import org.deeplearning4j.nn.conf.layers.OutputLayer 
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork 
import org.deeplearning4j.nn.weights.WeightInit 
import org.deeplearning4j.spark.impl.multilayer.SparkDl4jMultiLayer 
import org.nd4j.linalg.lossfunctions.LossFunctions 

object FeedForwardNetworkWithSpark { 
    def main(args:Array[String]): Unit ={ 
    val recordReader:RecordReader = new CSVRecordReader(0,",") 
    val conf = new SparkConf() 
     .setAppName("FeedForwardNetwork-Iris") 
    val sc = new SparkContext(conf) 
    val numInputs:Int = 4 
    val outputNum = 3 
    val iterations =1 
    val multiLayerConfig:MultiLayerConfiguration = new NeuralNetConfiguration.Builder() 
     .seed(12345) 
     .iterations(iterations) 
     .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT) 
     .learningRate(1e-1) 
     .l1(0.01).regularization(true).l2(1e-3) 
     .list(3) 
     .layer(0, new DenseLayer.Builder().nIn(numInputs).nOut(3).activation("tanh").weightInit(WeightInit.XAVIER).build()) 
     .layer(1, new DenseLayer.Builder().nIn(3).nOut(2).activation("tanh").weightInit(WeightInit.XAVIER).build()) 
     .layer(2, new OutputLayer.Builder(LossFunctions.LossFunction.MCXENT).weightInit(WeightInit.XAVIER) 
     .activation("softmax") 
     .nIn(2).nOut(outputNum).build()) 
     .backprop(true).pretrain(false) 
     .build 
    val network:MultiLayerNetwork = new MultiLayerNetwork(multiLayerConfig) 
    network.init 
    network.setUpdater(null) 
    val sparkNetwork:SparkDl4jMultiLayer = new 
     SparkDl4jMultiLayer(sc,network) 
    val nEpochs:Int = 6 
    val listBuffer = new ListBuffer[Array[Float]]() 
    (0 until nEpochs).foreach{i => val net:MultiLayerNetwork = sparkNetwork.fit("/user/iris.txt",4,recordReader) 
     listBuffer +=(net.params.data.asFloat().clone()) 
     } 
    println("Parameters vs. iteration Output: ") 
    (0 until listBuffer.size).foreach{i => 
     println(i+"\t"+listBuffer(i).mkString)} 
    } 
} 

는 오류를 표시하지 않습니다, 내 build.sbt 파일

name := "HWApp" 

version := "0.1" 

scalaVersion := "2.12.3" 

libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.6.0" % "provided" 
libraryDependencies += "org.apache.spark" % "spark-mllib_2.10" % "1.6.0" % "provided" 
libraryDependencies += "org.deeplearning4j" % "deeplearning4j-nlp" % "0.4-rc3.8" 
libraryDependencies += "org.deeplearning4j" % "dl4j-spark" % "0.4-rc3.8" 
libraryDependencies += "org.deeplearning4j" % "deeplearning4j-core" % "0.4-rc3.8" 
libraryDependencies += "org.nd4j" % "nd4j-x86" % "0.4-rc3.8" % "test" 
libraryDependencies += "org.nd4j" % "nd4j-api" % "0.4-rc3.8" 
libraryDependencies += "org.nd4j" % "nd4j-jcublas-7.0" % "0.4-rc3.8" 
libraryDependencies += "org.nd4j" % "canova-api" % "0.0.0.14" 

가요하지만 난 클러스터에서 응용 프로그램을 실행할 때 : 내가 뭔가있어 이 같은 :

Error

나는 그것이 나에게 무엇을 원하는지 모른다. 조금이라도 도움을 주시면 감사하겠습니다. 감사.

답변

0

난 당신이 버전의 목록을 함께했다 방법을 잘 모르겠어요 (난 그냥 무작위로 컴파일 겠지? 그렇게하지 마십시오.)

당신은 dl4j의 1.5 세 버전을 사용하는 더 이상 존재하지 않는 것보다 1 년 더 오래된 종속성.

다른 오픈 소스 프로젝트처럼 처음부터 시작하여 예제를 시작하십시오. 여기 예제 프로젝트와 https://deeplearning4j.org/quickstart

: 더 https://github.com/deeplearnin4j/dl4j-examples

몇 가지 :

는 여기에서 찾을 수 있습니다 노바는 더 이상 존재하지 않는 및 년 이상 datavec 이름이 변경되었습니다.

모든 dl4j, datavec, nd4j .. 버전은 동일해야합니다.

spark와 같은 스카 모듈을 사용하는 경우 스칼라 모듈도 항상 동일한 스칼라 버전이어야합니다.

따라서 스칼라 2.12와 스칼라 2.10 종속성을 혼합합니다. 스칼라는 없습니다 (즉, dl4j와 관련 없음).

Dl4j는 스칼라 2.11 만 지원합니다. 이것은 주로 cdh와 hortonworks와 같은 hadoop 배포판이 스칼라 2.12를 아직 지원하지 않기 때문입니다.

편집 : dl4j에 대해주의해야 할 또 다른 사항은 우리가 스파크 버전을 만드는 방법입니다. 스파크 1과 2가 지원됩니다. 귀하의 이슈 ID가 있어야한다 : (보통 2.10, 2.11)

dl4j - 스파크 _ $ {yourscala 버전} 와 종속성과 같은 : 0.9.1_spark _ $ {SPARK 버전이}

이 적용 우리의 NLP 모듈도 마찬가지입니다.

우리의 시작을 따르지 않은 사람들을 위해 편집하십시오. (제발, 우리는 최신 상태로 유지하십시오.) 또한 항상 nd4j 백엔드가 필요합니다. 대개 이것은 nd4j-native-platform이지만 gpus를 다음과 함께 사용하는 경우 cuda 일 수 있습니다. nd4j-cuda - $ {YOUR CUDA VERSION} - 플랫폼

+0

신속하고 간결한 대답에 감사드립니다. 내 built.sbt 파일을 다시 조정하겠습니다. –

+0

부탁이 필요합니다.이것들은 현재 사용하고있는 스칼라와 스파크 버전입니다. scalaVersion : = "2.11.11" libraryDependencies + = "org.apache.spark"% "spark-core_2.11"% "1.6.0"% "" libraryDependencies + = "org.apache.spark"% "spark-mllib_2.11"% "1.6.0"% "" 위의 scala 및 spark 버전과 호환되는 dl4j 및 nd4j 버전을 알려주십시오. –

+0

모든 것을 끝까지 보여주는 예제를 따라주세요. 그룹 ID, 이슈 ID 및 버전이 모두 sbt와 일치합니다. –