aboutsummaryrefslogtreecommitdiff
path: root/.devops
diff options
context:
space:
mode:
authorBernat Vadell <hounter.caza@gmail.com>2023-03-17 10:47:06 +0100
committerGitHub <noreply@github.com>2023-03-17 10:47:06 +0100
commit2af23d30434a677c6416812eea52ccc0af65119c (patch)
tree900c5ac5ceef13f65194ca8334cde41ed3590c09 /.devops
parent904d2a8d6acd667c9633138d45a361d40fbf76d0 (diff)
🚀 Dockerize llamacpp (#132)
* feat: dockerize llamacpp * feat: split build & runtime stages * split dockerfile into main & tools * add quantize into tool docker image * Update .devops/tools.sh Co-authored-by: Georgi Gerganov <ggerganov@gmail.com> * add docker action pipeline * change CI to publish at github docker registry * fix name runs-on macOS-latest is macos-latest (lowercase) * include docker versioned images * fix github action docker * fix docker.yml * feat: include all-in-one command tool & update readme.md --------- Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
Diffstat (limited to '.devops')
-rw-r--r--.devops/full.Dockerfile17
-rw-r--r--.devops/main.Dockerfile18
-rwxr-xr-x.devops/tools.sh46
3 files changed, 81 insertions, 0 deletions
diff --git a/.devops/full.Dockerfile b/.devops/full.Dockerfile
new file mode 100644
index 0000000..618cddd
--- /dev/null
+++ b/.devops/full.Dockerfile
@@ -0,0 +1,17 @@
+ARG UBUNTU_VERSION=22.04
+
+FROM ubuntu:$UBUNTU_VERSION as build
+
+RUN apt-get update && \
+ apt-get install -y build-essential python3 python3-pip
+
+RUN pip install --upgrade pip setuptools wheel \
+ && pip install torch torchvision torchaudio sentencepiece numpy
+
+WORKDIR /app
+
+COPY . .
+
+RUN make
+
+ENTRYPOINT ["/app/.devops/tools.sh"] \ No newline at end of file
diff --git a/.devops/main.Dockerfile b/.devops/main.Dockerfile
new file mode 100644
index 0000000..cd575ef
--- /dev/null
+++ b/.devops/main.Dockerfile
@@ -0,0 +1,18 @@
+ARG UBUNTU_VERSION=22.04
+
+FROM ubuntu:$UBUNTU_VERSION as build
+
+RUN apt-get update && \
+ apt-get install -y build-essential
+
+WORKDIR /app
+
+COPY . .
+
+RUN make
+
+FROM ubuntu:$UBUNTU_VERSION as runtime
+
+COPY --from=build /app/main /main
+
+ENTRYPOINT [ "/main" ] \ No newline at end of file
diff --git a/.devops/tools.sh b/.devops/tools.sh
new file mode 100755
index 0000000..b5711c9
--- /dev/null
+++ b/.devops/tools.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+set -e
+
+# Read the first argument into a variable
+arg1="$1"
+
+# Shift the arguments to remove the first one
+shift
+
+# Join the remaining arguments into a single string
+arg2="$@"
+
+if [[ $arg1 == '--convert' || $arg1 == '-c' ]]; then
+ python3 ./convert-pth-to-ggml.py $arg2
+elif [[ $arg1 == '--quantize' || $arg1 == '-q' ]]; then
+ ./quantize $arg2
+elif [[ $arg1 == '--run' || $arg1 == '-r' ]]; then
+ ./main $arg2
+elif [[ $arg1 == '--download' || $arg1 == '-d' ]]; then
+ python3 ./download-pth.py $arg2
+elif [[ $arg1 == '--all-in-one' || $arg1 == '-a' ]]; then
+ echo "Downloading model..."
+ python3 ./download-pth.py "$1" "$2"
+ echo "Converting PTH to GGML..."
+ for i in `ls $1/$2/ggml-model-f16.bin*`; do
+ if [ -f "${i/f16/q4_0}" ]; then
+ echo "Skip model quantization, it already exists: ${i/f16/q4_0}"
+ else
+ echo "Converting PTH to GGML: $i into ${i/f16/q4_0}..."
+ ./quantize "$i" "${i/f16/q4_0}" 2
+ fi
+ done
+else
+ echo "Unknown command: $arg1"
+ echo "Available commands: "
+ echo " --run (-r): Run a model previously converted into ggml"
+ echo " ex: -m /models/7B/ggml-model-q4_0.bin -p \"Building a website can be done in 10 simple steps:\" -t 8 -n 512"
+ echo " --convert (-c): Convert a llama model into ggml"
+ echo " ex: \"/models/7B/\" 1"
+ echo " --quantize (-q): Optimize with quantization process ggml"
+ echo " ex: \"/models/7B/ggml-model-f16.bin\" \"/models/7B/ggml-model-q4_0.bin\" 2"
+ echo " --download (-d): Download original llama model from CDN: https://agi.gpt4.org/llama/"
+ echo " ex: \"/models/\" 7B"
+ echo " --all-in-one (-a): Execute --download, --convert & --quantize"
+ echo " ex: \"/models/\" 7B"
+fi