TensorFlow 자바 설치

TensorFlow 자바는 모든 JVM에서 실행하여 머신러닝 모델을 빌드, 학습, 배포하는 데 사용할 수 있습니다. 그래프 또는 즉시 실행 모드에서 CPU와 GPU 실행을 모두 지원하며 JVM 환경에서 TensorFlow를 사용하는 데 필요한 다양한 API를 제공합니다. 자바 및 Scala, Kotlin과 같은 기타 JVM 언어는 전 세계의 크고 작은 기업에서 빈번하게 사용되므로 TensorFlow 자바는 대규모 머신러닝을 채택하기 위한 전략적 선택이 될 수 있습니다.

요구사항

TensorFlow 자바는 자바 8 이상에서 실행되며 다음 플랫폼에서 즉시 사용할 수 있습니다.

  • Ubuntu 16.04 이상; 64비트, x86
  • macOS 10.12.6(Sierra) 이상, 64비트, x86
  • Windows 7 이상, 64비트, x86

버전

TensorFlow 자바에는 TensorFlow 런타임과 별개로 자체 출시 주기가 있습니다. 따라서 TensorFlow 자바를 실행하는 TensorFlow 런타임과 버전이 일치하지 않습니다. TensorFlow 자바 버전 관리 표에서 사용 가능한 모든 버전 및 TensorFlow 런타임과의 매핑을 찾아보세요.

아티팩트

프로젝트에 TensorFlow 자바를 추가하는 몇 가지 방법이 있습니다. 가장 쉬운 방법은 TensorFlow Java Core API 및 지원되는 모든 플랫폼에서 실행하는 데 필요한 네이티브 종속 항목을 모두 포함하고 있는 tensorflow-core-platform 아티팩트에 종속 항목을 추가하는 것입니다.

퓨어 CPU 버전 대신 다음 확장 프로그램 중 하나를 선택할 수도 있습니다.

  • tensorflow-core-platform-mkl: 모든 플랫폼에서 Intel® MKL-DNN 지원
  • tensorflow-core-platform-gpu: Linux 및 Windows 플랫폼에서 CUDA® 지원
  • tensorflow-core-platform-mkl-gpu: Linux 및 Windows 플랫폼에서 Intel® MKL-DNN 및 CUDA® 지원

또한 tensorflow-framework 라이브러리의 별도 종속 항목을 추가하여 JVM에서 TensorFlow 기반 머신러닝을 위한 다양한 유틸리티를 활용할 수도 있습니다.

Maven으로 설치

Maven 애플리케이션에 TensorFlow를 포함하려면 아티팩트의 종속 항목을 프로젝트의 pom.xml 파일에 추가하세요. 예를 들면 다음과 같습니다.

<dependency>
  <groupId>org.tensorflow</groupId>
  <artifactId>tensorflow-core-platform</artifactId>
  <version>0.2.0</version>
</dependency>

종속 항목 수 줄이기

tensorflow-core-platform 아티팩트의 종속 항목을 추가하면 지원되는 모든 플랫폼의 네이티브 라이브러리를 가져오게 되므로 프로젝트의 크기가 상당히 증가할 수 있다는 점에 주의해야 합니다.

사용 가능한 플랫폼의 하위 집합을 대상으로 하려면 Maven 종속 항목 제외 기능을 사용하여 다른 플랫폼에서 불필요한 아티팩트를 제외할 수 있습니다.

애플리케이션에 포함할 플랫폼을 선택하는 또 다른 방법으로는 Maven 명령줄 또는 pom.xml에 JavaCPP 시스템 속성을 설정하는 방법도 있습니다. 자세한 내용은 JavaCPP 문서를 참고하세요.

스냅샷 사용

TensorFlow 자바 소스 저장소의 최신 TensorFlow 자바 개발 스냅샷은 OSS Sonatype Nexus 저장소에서 확인할 수 있습니다. 이러한 아티팩트를 사용하려면 pom.xml에 OSS 스냅샷 저장소를 구성해야 합니다.

<repositories>
    <repository>
        <id>tensorflow-snapshots</id>
        <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>org.tensorflow</groupId>
        <artifactId>tensorflow-core-platform</artifactId>
        <version>0.3.0-SNAPSHOT</version>
    </dependency>
</dependencies>

Gradle로 설치

Gradle 애플리케이션에 TensorFlow를 포함하려면 아티팩트의 종속 항목을 프로젝트의 build.gradle 파일에 추가하세요. 예를 들면 다음과 같습니다.

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.tensorflow', name: 'tensorflow-core-platform', version: '0.2.0'
}

종속 항목 수 줄이기

Gradle을 사용하여 TensorFlow 자바에서 네이티브 아티팩트를 제외하는 작업은 Maven을 사용할 때만큼 간단하지 않습니다. Gradle JavaCPP 플러그인을 사용하여 종속 항목의 수를 줄이는 것이 좋습니다.

자세한 내용은 Gradle JavaCPP 문서를 참고하세요.

소스에서 설치

소스에서 TensorFlow 자바를 빌드하고 가능한 경우 맞춤설정하는 방법을 알아보려면 다음 안내를 읽어보세요.

예제 프로그램

이 예제에서는 TensorFlow를 사용하여 Apache Maven 프로젝트를 빌드하는 방법을 보여줍니다. 먼저 프로젝트의 pom.xml 파일에 TensorFlow 종속 항목을 추가합니다.

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.myorg</groupId>
    <artifactId>hellotensorflow</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <exec.mainClass>HelloTensorFlow</exec.mainClass>
    <!-- Minimal version for compiling TensorFlow Java is JDK 8 -->
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
    <!-- Include TensorFlow (pure CPU only) for all supported platforms -->
        <dependency>
            <groupId>org.tensorflow</groupId>
            <artifactId>tensorflow-core-platform</artifactId>
            <version>0.2.0</version>
        </dependency>
    </dependencies>
</project>

소스 파일(src/main/java/HelloTensorFlow.java)을 만듭니다.

import org.tensorflow.ConcreteFunction;
import org.tensorflow.Signature;
import org.tensorflow.Tensor;
import org.tensorflow.TensorFlow;
import org.tensorflow.op.Ops;
import org.tensorflow.op.core.Placeholder;
import org.tensorflow.op.math.Add;
import org.tensorflow.types.TInt32;

public class HelloTensorFlow {

  public static void main(String[] args) throws Exception {
    System.out.println("Hello TensorFlow " + TensorFlow.version());

    try (ConcreteFunction dbl = ConcreteFunction.create(HelloTensorFlow::dbl);
        Tensor<TInt32> x = TInt32.scalarOf(10);
        Tensor<TInt32> dblX = dbl.call(x).expect(TInt32.DTYPE)) {
      System.out.println(x.data().getInt() + " doubled is " + dblX.data().getInt());
    }
  }

  private static Signature dbl(Ops tf) {
    Placeholder<TInt32> x = tf.placeholder(TInt32.DTYPE);
    Add<TInt32> dblX = tf.math.add(x, x);
    return Signature.builder().input("x", x).output("dbl", dblX).build();
  }
}

컴파일 및 실행합니다.

mvn -q compile exec:java

이 명령어는 TensorFlow version and a simple calculation.을 출력합니다.

완료되었습니다. TensorFlow 자바가 구성되었습니다.