-
Notifications
You must be signed in to change notification settings - Fork 660
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Adds llama.cpp engine * [llama.cpp] Adds CI publish workflow and fixes windows build --------- Co-authored-by: Frank Liu <frankfliu2000@gmail.com>
- Loading branch information
1 parent
e0aa833
commit 308026f
Showing
27 changed files
with
3,173 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,204 @@ | ||
name: Native S3 llama.cpp | ||
|
||
on: | ||
workflow_dispatch: | ||
|
||
jobs: | ||
build-llamacpp-jni-osx: | ||
runs-on: macos-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- name: Set up JDK 17 | ||
uses: actions/setup-java@v4 | ||
with: | ||
distribution: 'corretto' | ||
java-version: 17 | ||
- uses: actions/cache@v3 | ||
with: | ||
path: ~/.gradle/caches | ||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} | ||
restore-keys: | | ||
${{ runner.os }}-gradle- | ||
- name: Release JNI prep | ||
run: | | ||
./gradlew :engines:llama:compileJNI | ||
./gradlew -Pjni :engines:llama:test -Dnightly=true | ||
- name: Configure AWS Credentials | ||
uses: aws-actions/configure-aws-credentials@v1-node16 | ||
with: | ||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
aws-region: us-east-2 | ||
- name: Copy files to S3 with the AWS CLI | ||
run: | | ||
LLAMACPP_VERSION="$(cat gradle.properties | awk -F '=' '/llamacpp_version/ {print $2}')" | ||
aws s3 sync engines/llama/jnilib s3://djl-ai/publish/llama/${LLAMACPP_VERSION}/jnilib/ | ||
aws cloudfront create-invalidation --distribution-id E371VB8JQ6NRVY --paths "/llama/${LLAMACPP_VERSION}/jnilib/*" | ||
build-llamacpp-jni-linux: | ||
runs-on: ubuntu-latest | ||
container: centos:centos7 | ||
steps: | ||
- name: Install Environment | ||
run: | | ||
yum -y update | ||
yum -y install centos-release-scl-rh epel-release perl-core | ||
yum -y install devtoolset-7 git patch cmake3 libstdc++-static | ||
ln -s /usr/bin/cmake3 /usr/bin/cmake | ||
pip3 install awscli --upgrade | ||
- uses: actions/checkout@v3 | ||
- name: Set up JDK 17 | ||
uses: actions/setup-java@v3 | ||
with: | ||
distribution: 'corretto' | ||
java-version: 17 | ||
- name: Release JNI prep | ||
run: | | ||
export PATH=$PATH:/opt/rh/devtoolset-7/root/usr/bin | ||
./gradlew :engines:llama:compileJNI | ||
./gradlew -Pjni :engines:llama:test -Dnightly=true | ||
- name: Configure AWS Credentials | ||
uses: aws-actions/configure-aws-credentials@v1-node16 | ||
with: | ||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
aws-region: us-east-2 | ||
- name: Copy files to S3 with the AWS CLI | ||
run: | | ||
LLAMACPP_VERSION="$(cat gradle.properties | awk -F '=' '/llamacpp_version/ {print $2}')" | ||
aws s3 sync engines/llama/jnilib s3://djl-ai/publish/llama/${LLAMACPP_VERSION}/jnilib/ | ||
aws cloudfront create-invalidation --distribution-id E371VB8JQ6NRVY --paths "/llama/${LLAMACPP_VERSION}/jnilib/*" | ||
build-llamacpp-jni-windows: | ||
runs-on: windows-latest | ||
steps: | ||
- name: Install Environment | ||
run: | | ||
choco install -y mingw | ||
- uses: actions/checkout@v3 | ||
- name: Set up JDK 17 | ||
uses: actions/setup-java@v4 | ||
with: | ||
distribution: 'corretto' | ||
java-version: 17 | ||
- uses: actions/cache@v3 | ||
with: | ||
path: ~/.gradle/caches | ||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} | ||
restore-keys: | | ||
${{ runner.os }}-gradle- | ||
- name: Release CPU JNI | ||
shell: cmd | ||
run: | | ||
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64 | ||
gradlew :engines:llama:compileJNI | ||
gradlew -Pjni :engines:llama:test -Dnightly=true | ||
- name: Configure AWS Credentials | ||
uses: aws-actions/configure-aws-credentials@v1-node16 | ||
with: | ||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
aws-region: us-east-2 | ||
- name: Copy files to S3 with the AWS CLI | ||
shell: bash | ||
run: | | ||
LLAMACPP_VERSION="$(cat gradle.properties | awk -F '=' '/llamacpp_version/ {print $2}')" | ||
aws s3 sync engines/llama/jnilib s3://djl-ai/publish/llama/${LLAMACPP_VERSION}/jnilib/ | ||
aws cloudfront create-invalidation --distribution-id E371VB8JQ6NRVY --paths "/llama/${LLAMACPP_VERSION}/jnilib/*" | ||
build-llamacpp-jni-arm64-osx: | ||
if: ${{ github.repository == 'deepjavalibrary/djl' && always() }} | ||
runs-on: [ self-hosted, ARM64, macOS ] | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- name: Set up JDK 17 | ||
uses: actions/setup-java@v4 | ||
with: | ||
java-version: 17 | ||
distribution: corretto | ||
architecture: aarch64 | ||
- uses: actions/cache@v3 | ||
with: | ||
path: ~/.gradle/caches | ||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} | ||
restore-keys: | | ||
${{ runner.os }}-gradle- | ||
- name: Release JNI prep | ||
run: | | ||
./gradlew :engines:llama:compileJNI | ||
./gradlew -Pjni :engines:llama:test -Dnightly=true | ||
- name: Configure AWS Credentials | ||
uses: aws-actions/configure-aws-credentials@v1-node16 | ||
with: | ||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
aws-region: us-east-2 | ||
- name: Copy files to S3 with the AWS CLI | ||
run: | | ||
LLAMACPP_VERSION="$(cat gradle.properties | awk -F '=' '/llamacpp_version/ {print $2}')" | ||
aws s3 sync engines/llama/jnilib s3://djl-ai/publish/llama/${LLAMACPP_VERSION}/jnilib/ | ||
aws cloudfront create-invalidation --distribution-id E371VB8JQ6NRVY --paths "/llama/${LLAMACPP_VERSION}/jnilib/*" | ||
create-aarch64-runner: | ||
if: github.repository == 'deepjavalibrary/djl' | ||
runs-on: [ self-hosted, scheduler ] | ||
steps: | ||
- name: Create new Graviton instance | ||
id: create_aarch64 | ||
run: | | ||
cd /home/ubuntu/djl_benchmark_script/scripts | ||
token=$( curl -X POST -H "Authorization: token ${{ secrets.ACTION_RUNNER_PERSONAL_TOKEN }}" \ | ||
https://api.github.com/repos/deepjavalibrary/djl/actions/runners/registration-token \ | ||
--fail \ | ||
| jq '.token' | tr -d '"' ) | ||
./start_instance.sh action_graviton $token djl | ||
outputs: | ||
aarch64_instance_id: ${{ steps.create_aarch64.outputs.action_graviton_instance_id }} | ||
|
||
build-llamacpp-jni-aarch64: | ||
if: ${{ github.repository == 'deepjavalibrary/djl' && always() }} | ||
runs-on: [ self-hosted, aarch64 ] | ||
timeout-minutes: 30 | ||
needs: create-aarch64-runner | ||
container: amazonlinux:2 | ||
steps: | ||
- name: Install Environment | ||
run: | | ||
yum -y update | ||
yum -y groupinstall "Development Tools" | ||
yum -y install patch perl-IPC-Cmd cmake3 | ||
ln -s /usr/bin/cmake3 /usr/bin/cmake | ||
pip3 install awscli --upgrade | ||
- uses: actions/checkout@v3 | ||
- name: Set up JDK 17 | ||
uses: actions/setup-java@v3 | ||
with: | ||
java-version: 17 | ||
distribution: corretto | ||
architecture: aarch64 | ||
- name: Release JNI prep | ||
run: | | ||
./gradlew :engines:llama:compileJNI | ||
./gradlew -Pjni :engines:llama:test -Dnightly=true | ||
- name: Configure AWS Credentials | ||
uses: aws-actions/configure-aws-credentials@v1-node16 | ||
with: | ||
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | ||
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | ||
aws-region: us-east-2 | ||
- name: Copy files to S3 with the AWS CLI | ||
run: | | ||
LLAMACPP_VERSION="$(cat gradle.properties | awk -F '=' '/llamacpp_version/ {print $2}')" | ||
aws s3 sync engines/llama/jnilib s3://djl-ai/publish/llama/${LLAMACPP_VERSION}/jnilib/ | ||
aws cloudfront create-invalidation --distribution-id E371VB8JQ6NRVY --paths "/llama/${LLAMACPP_VERSION}/jnilib/*" | ||
stop-runners: | ||
if: ${{ github.repository == 'deepjavalibrary/djl' && always() }} | ||
runs-on: [ self-hosted, scheduler ] | ||
needs: [ create-aarch64-runner, build-llamacpp-jni-aarch64 ] | ||
steps: | ||
- name: Stop all instances | ||
run: | | ||
cd /home/ubuntu/djl_benchmark_script/scripts | ||
instance_id=${{ needs.create-aarch64-runner.outputs.aarch64_instance_id }} | ||
./stop_instance.sh $instance_id |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
jnilib/ | ||
llama.cpp/ | ||
models/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
cmake_minimum_required(VERSION 3.12 FATAL_ERROR) | ||
|
||
project(djl_llama CXX) | ||
|
||
set(CMAKE_POSITION_INDEPENDENT_CODE ON) | ||
set(BUILD_SHARED_LIBS ON) | ||
|
||
set(JAVA_AWT_LIBRARY NotNeeded) | ||
set(JAVA_AWT_INCLUDE_PATH NotNeeded) | ||
find_package(JNI REQUIRED) | ||
|
||
add_subdirectory(llama.cpp) | ||
include(build-args.cmake) | ||
add_library(djl_llama SHARED src/main/native/ai_djl_llama.cpp) | ||
|
||
target_include_directories(djl_llama PRIVATE | ||
${JNI_INCLUDE_DIRS} | ||
src/main/native | ||
llama.cpp | ||
llama.cpp/common | ||
build/include) | ||
target_link_libraries(djl_llama PRIVATE common llama ${LLAMA_EXTRA_LIBS}) | ||
target_compile_features(djl_llama PRIVATE cxx_std_11) |
Oops, something went wrong.