Java 인프로세스 API 바인딩
Java 인프로세스 API 바인딩
Triton Inference Server는 JavaCPP를 사용해 Tritonserver를 감싸는 Java API 바인딩을 만들어요.
API는 tritonserver.java에 문서화되어 있고, 이 파일에서 생성된 웹 버전 API docs도 참고할 수 있어요.
참고: 현재
tritonserver.java에는 인프로세스 C-API 바인딩과 C-API Wrapper 바인딩이 모두 들어 있어요. C-API Wrapper에 대한 자세한 내용은 developer_tools 저장소에서 확인할 수 있어요.
출처: 공식문서
Java API를 쓰는 간단한 예제는 Samples 폴더에서 찾을 수 있는데, 여기 Simple.java는 simple.cc와 비슷한 예제예요. Simple.java를 빌드하고 실행하는 방법은 sample usage documentation을 참고하세요.
QA 폴더에서 L0_java로 시작하는 폴더들은 Java API 테스트인데, ResNet50 테스트 같은 것이 시작하기에 좋은 참고가 돼요.
Java API 설정 방법
Tritonserver Java API를 쓰려면 환경에 Tritonserver 라이브러리와 의존성이 설치되어 있어야 해요. 방법은 두 가지예요.
- Tritonserver docker 컨테이너 사용 — 여기에 ① C API용
.jarJava 바인딩(권장), ② maven으로 직접 바인딩 빌드, 두 가지 선택지가 있어요. - Docker 없이 자신의 환경에서 Triton 직접 빌드(권장하지 않아요).
Tritonserver 컨테이너 실행과 의존성 설치
Triton Java API 환경을 만들려면 다음 과정을 따라요.
- 먼저 Docker 컨테이너를 실행해요.
$ docker run -it --gpus=all -v ${pwd}:/workspace nvcr.io/nvidia/tritonserver:<your container version>-py3 bash
- jdk를 설치해요.
$ apt update && apt install -y openjdk-11-jdk
- maven을 설치해요 (직접 바인딩을 빌드하고 싶을 때만 필요해요).
$ cd /opt/tritonserver
$ wget https://archive.apache.org/dist/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz
$ tar zxvf apache-maven-3.8.4-bin.tar.gz
$ export PATH=/opt/tritonserver/apache-maven-3.8.4/bin:$PATH
Java 바인딩 Jar로 Java 프로그램 실행
Tritonserver와 의존성이 설치되었다면 다음 과정으로 Java 바인딩과 함께 Java 프로그램을 실행할 수 있어요.
-
Java 바인딩을 환경에 배치해요. 다음 두 방법 중 하나를 골라요.
a. 제공된 빌드 스크립트로 Java API 바인딩을 빌드:
# Clone Triton client repo. Recommended client repo tag is: main $ git clone --single-branch --depth=1 -b <client repo tag> https://github.com/triton-inference-server/client.git clientrepo # Run build script ## For In-Process C-API Java Bindings $ source clientrepo/src/java-api-bindings/scripts/install_dependencies_and_build.sh ## For C-API Wrapper (Triton with C++ bindings) Java Bindings $ source clientrepo/src/java-api-bindings/scripts/install_dependencies_and_build.sh --enable-developer-tools-server이 명령은 Java 바인딩을
/workspace/install/java-api-bindings/tritonserver-java-bindings.jar에 설치해요.또는
b. Triton SDK 컨테이너에서 "Uber Jar"를 복사:
$ id=$(docker run -dit nvcr.io/nvidia/tritonserver:<triton container version>-py3-sdk bash) $ docker cp ${id}:/workspace/install/java-api-bindings/tritonserver-java-bindings.jar <Uber Jar directory>/tritonserver-java-bindings.jar $ docker stop ${id}참고:
tritonserver-java-bindings.jar에는 인프로세스 Java 바인딩만 들어 있어요. C-API Wrapper Java 바인딩을 쓰려면 빌드 스크립트를 사용하세요. -
Java 바인딩을 담은 빌드된 "Uber Jar"를 사용해요.
$ java -cp <Uber Jar directory>/tritonserver-java-bindings.jar <your Java program>
Maven으로 Java 바인딩을 빌드하고 Java 프로그램 실행
Java 바인딩을 수정하고 싶다면 Maven으로 직접 빌드할 수 있어요. Run Java program with Java bindings Jar의 1.a 부분을 참고해 JavaCPP-presets의 Tritonserver 바인딩을 수정하지 않고도 jar을 직접 빌드할 수 있어요. 과정은 다음과 같아요.
- javacpp-presets/tritonserver로 로컬 저장소(
/root/.m2/repository)에 JNI 바이너리를 만들어요. C-API Wrapper Java 바인딩(Triton with C++ bindings)의 경우 cmake·rapidjson 같은 빌드 전용 의존성도 설치해야 해요. 필요한 의존성과 컨테이너 수정 사항은 java installation script에서 확인하세요. 의존성 설치 후 javacpp-presets에서 tritonserver 프로젝트를 빌드해요.
$ git clone https://github.com/bytedeco/javacpp-presets.git
$ cd javacpp-presets
$ mvn clean install --projects .,tritonserver
$ mvn clean install -f platform --projects ../tritonserver/platform -Djavacpp.platform=linux-x86_64
-
Maven용 커스텀
*.pom파일을 만들어요. pom 파일 만드는 방법은 samples/simple/pom.xml을 참고하세요. -
pom.xml을 만든 뒤 다음으로 애플리케이션을 빌드해요.
$ mvn compile exec:java -Djavacpp.platform=linux-x86_64 -Dexec.args="<your input args>"
더 알아보기 (Learn more)
- 인프로세스 Triton 서버 API — Server API 개요
- C API (인프로세스) — C 코드에서 직접 쓰기