docs/customization_guide/inprocess_java_api.md
The Triton Inference Server uses Java CPP to create bindings around Tritonserver to create Java API.
The API is documented in
tritonserver.java.
Alternatively, the user can refer to the web version API docs
generated from tritonserver.java.
Note: Currently, tritonserver.java contains bindings for both the In-process C-API
and the bindings for C-API Wrapper. More information about the developer_tools/server C-API wrapper can be found in the developer_tools repository.
A simple example using the Java API can be found in
Samples folder
which includes Simple.java which is similar to
simple.cc.
Please refer to
sample usage documentation
to learn about how to build and run Simple.java.
In the QA folder, folders starting with L0_java include Java API tests. These can be useful references for getting started, such as the ResNet50 test.
To use the Tritonserver Java API, you will need to have the Tritonserver library and dependencies installed in your environment. There are two ways to do this:
.jar Java bindings to C API (recommended)To set up your environment with Triton Java API, please follow the following steps:
$ 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 (only if you want to build the bindings yourself):$ 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
After ensuring that Tritonserver and dependencies are installed, you can run your Java program with the Java bindings with the following steps:
Place Java bindings into your environment. You can do this by either:
a. Building Java API bindings with provided build script:
# 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
This will install the Java bindings to /workspace/install/java-api-bindings/tritonserver-java-bindings.jar
or
b. Copying "Uber Jar" from Triton SDK container to your environment
$ 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}
Note: tritonserver-java-bindings.jar only includes the In-Process Java Bindings. To use the C-API Wrapper Java Bindings, please use the build script.
Use the built "Uber Jar" that contains the Java bindings
$ java -cp <Uber Jar directory>/tritonserver-java-bindings.jar <your Java program>
If you want to make changes to the Java bindings, then you can use Maven to build yourself. You can refer to part 1.a of Run Java program with Java bindings Jar to also build the jar yourself without any modifications to the Tritonserver bindings in JavaCPP-presets. You can do this using the following steps:
/root/.m2/repository)
with javacpp-presets/tritonserver.
For C-API Wrapper Java bindings (Triton with C++ bindings), you need to
install some build specific dependencies including cmake and rapidjson.
Refer to java installation script
for dependencies you need to install and modifications you need to make for your container.
After installing dependencies, you can build the tritonserver project on javacpp-presets: $ 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
*.pom file for Maven. Please refer to
samples/simple/pom.xml as
reference for how to create your pom file.pom.xml file you can build your application with: $ mvn compile exec:java -Djavacpp.platform=linux-x86_64 -Dexec.args="<your input args>"