Skip to content

Commit 2a7d1c4

Browse files
authored
Merge pull request #40 from huggingface/migrate-docker
Migrate Docker container to internal registry
2 parents 90eb5d4 + 841e900 commit 2a7d1c4

34 files changed

+375
-222
lines changed

.github/workflows/build-container.yaml

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,40 +18,36 @@ jobs:
1818
starlette-pytorch-cpu:
1919
uses: ./.github/workflows/docker-build-action.yaml
2020
with:
21-
context: ./
22-
repository: huggingface
23-
image: hf-endpoints-inference-pytorch-cpu
24-
dockerfile: dockerfiles/starlette/pytorch/Dockerfile.cpu
21+
image: inference-pytorch-cpu
22+
dockerfile: dockerfiles/pytorch/cpu/Dockerfile
2523
secrets:
26-
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
27-
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
24+
TAILSCALE_AUTHKEY: ${{ secrets.TAILSCALE_AUTHKEY }}
25+
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
26+
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
2827
starlette-pytorch-gpu:
2928
uses: ./.github/workflows/docker-build-action.yaml
3029
with:
31-
context: ./
32-
repository: huggingface
33-
image: hf-endpoints-inference-pytorch-gpu
34-
dockerfile: dockerfiles/starlette/pytorch/Dockerfile.gpu
30+
image: inference-pytorch-gpu
31+
dockerfile: dockerfiles/pytorch/gpu/Dockerfile
3532
secrets:
36-
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
37-
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
33+
TAILSCALE_AUTHKEY: ${{ secrets.TAILSCALE_AUTHKEY }}
34+
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
35+
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
3836
starlette-tensorflow-cpu:
3937
uses: ./.github/workflows/docker-build-action.yaml
4038
with:
41-
context: ./
42-
repository: huggingface
43-
image: hf-endpoints-inference-tensorflow-cpu
44-
dockerfile: dockerfiles/starlette/tensorflow/Dockerfile.cpu
39+
image: inference-tensorflow-cpu
40+
dockerfile: dockerfiles/tensorflow/cpu/Dockerfile
4541
secrets:
46-
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
47-
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
42+
TAILSCALE_AUTHKEY: ${{ secrets.TAILSCALE_AUTHKEY }}
43+
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
44+
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
4845
starlette-tensorflow-gpu:
4946
uses: ./.github/workflows/docker-build-action.yaml
5047
with:
51-
context: ./
52-
repository: huggingface
53-
image: hf-endpoints-inference-tensorflow-gpu
54-
dockerfile: dockerfiles/starlette/tensorflow/Dockerfile.gpu
48+
image: inference-tensorflow-gpu
49+
dockerfile: dockerfiles/tensorflow/gpu/Dockerfile
5550
secrets:
56-
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
57-
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
51+
TAILSCALE_AUTHKEY: ${{ secrets.TAILSCALE_AUTHKEY }}
52+
REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}
53+
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}

.github/workflows/docker-build-action.yaml

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@ on:
33
inputs:
44
context:
55
type: string
6-
required: true
6+
required: false
7+
default: "./"
78
repository:
89
type: string
9-
required: true
10+
required: false
11+
default: "registry.internal.huggingface.tech/hf-endpoints"
1012
image:
1113
type: string
1214
required: true
13-
platforms:
14-
type: string
15-
required: false
16-
default: linux/amd64
1715
build_args:
1816
type: string
1917
required: false
@@ -23,9 +21,11 @@ on:
2321
required: false
2422
default: "Dockerfile"
2523
secrets:
26-
DOCKER_USERNAME:
24+
REGISTRY_USERNAME:
25+
required: true
26+
REGISTRY_PASSWORD:
2727
required: true
28-
DOCKER_PASSWORD:
28+
TAILSCALE_AUTHKEY:
2929
required: true
3030

3131
jobs:
@@ -35,17 +35,23 @@ jobs:
3535
- name: Check out
3636
uses: actions/checkout@v3
3737

38-
- name: Set up QEMU
39-
uses: docker/setup-qemu-action@v2
38+
- name: Tailscale
39+
uses: tailscale/github-action@v1
40+
with:
41+
authkey: ${{ secrets.TAILSCALE_AUTHKEY }}
42+
version: 1.38.2
4043

4144
- name: Set up Docker Buildx
4245
uses: docker/[email protected]
46+
with:
47+
install: true
4348

4449
- name: Login to container registry
4550
uses: docker/[email protected]
4651
with:
47-
username: ${{ secrets.DOCKER_USERNAME }}
48-
password: ${{ secrets.DOCKER_PASSWORD }}
52+
registry: ${{ inputs.repository }}
53+
username: ${{ secrets.REGISTRY_USERNAME }}
54+
password: ${{ secrets.REGISTRY_PASSWORD }}
4955

5056
- name: Inject slug/short variables
5157
uses: rlespinasse/github-slug-action@v4
@@ -57,4 +63,4 @@ jobs:
5763
context: ${{ inputs.context }}
5864
build-args: ${{ inputs.build_args }}
5965
file: ${{ inputs.context }}/${{ inputs.dockerfile }}
60-
tags: ${{ inputs.repository }}/${{ inputs.image }}:${{ env.GITHUB_SHA_SHORT }},${{ inputs.repository }}/${{ inputs.image }}:latest,
66+
tags: ${{ inputs.repository }}/${{ inputs.image }}:${{ env.GITHUB_SHA_SHORT }},${{ inputs.repository }}/${{ inputs.image }}:latest

.github/workflows/gpu-integ-test.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ jobs:
6464
- name: Install Python dependencies
6565
run: pip install -e .[test,dev,torch]
6666
- name: Build Docker
67-
run: docker build -t starlette-transformers:gpu -f dockerfiles/starlette/pytorch/Dockerfile.gpu .
67+
run: docker build -t starlette-transformers:gpu -f dockerfiles/pytorch/gpu/Dockerfile .
6868
- name: Run Integration Tests
6969
run: RUN_SLOW=True make integ-test
7070
tensorflow-integration-test:
@@ -86,7 +86,7 @@ jobs:
8686
- name: Install Python dependencies
8787
run: pip install -e .[test,dev,tensorflow]
8888
- name: Build Docker
89-
run: docker build -t starlette-transformers:gpu -f dockerfiles/starlette/tensorflow/Dockerfile.gpu .
89+
run: docker build -t starlette-transformers:gpu -f dockerfiles/tensorflow/gpu/Dockerfile .
9090
- name: Run Integration Tests
9191
run: RUN_SLOW=True make integ-test
9292

.github/workflows/integ-test.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- name: Install Python dependencies
2525
run: pip install -e .[test,dev,torch]
2626
- name: Build Docker
27-
run: docker build -t starlette-transformers:cpu -f dockerfiles/starlette/pytorch/Dockerfile.cpu .
27+
run: docker build -t starlette-transformers:cpu -f dockerfiles/pytorch/cpu/Dockerfile .
2828
- name: Run Integration Tests
2929
env:
3030
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
@@ -42,7 +42,7 @@ jobs:
4242
- name: Install Python dependencies
4343
run: pip install -e .[test,dev,tensorflow]
4444
- name: Build Docker
45-
run: docker build -t starlette-transformers:cpu -f dockerfiles/starlette/tensorflow/Dockerfile.cpu .
45+
run: docker build -t starlette-transformers:cpu -f dockerfiles/tensorflow/cpu/Dockerfile .
4646
- name: Run Integration Tests
4747
env:
4848
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,22 @@ HF_MODEL_ID=hf-internal-testing/tiny-random-distilbert HF_MODEL_DIR=tmp2 HF_TASK
2424

2525
_cpu images_
2626
```bash
27-
docker build -t starlette-transformers:cpu -f dockerfiles/starlette/pytorch/Dockerfile.cpu .
28-
docker build -t starlette-transformers:cpu -f dockerfiles/starlette/tensorflow/Dockerfile.cpu .
27+
docker build -t starlette-transformers:cpu -f dockerfiles/pytorch/cpu/Dockerfile .
28+
docker build -t starlette-transformers:cpu -f dockerfiles/tensorflow/cpu/Dockerfile .
2929
```
3030

3131
_gpu images_
3232
```bash
33-
docker build -t starlette-transformers:gpu -f dockerfiles/starlette/pytorch/Dockerfile.gpu .
34-
docker build -t starlette-transformers:gpu -f dockerfiles/starlette/tensorflow/Dockerfile.gpu .
33+
docker build -t starlette-transformers:gpu -f dockerfiles/pytorch/gpu/Dockerfile .
34+
docker build -t starlette-transformers:gpu -f dockerfiles/tensorflow/gpu/Dockerfile .
3535
```
3636

3737
2. Run the container and provide either environment variables to the HUB model you want to use or mount a volume to the container, where your model is stored.
3838

3939

4040
```bash
4141
docker run -ti -p 5000:5000 -e HF_MODEL_ID=distilbert-base-uncased-distilled-squad -e HF_TASK=question-answering starlette-transformers:cpu
42+
docker run -ti -p 5000:5000 -e HF_MODEL_DIR=/repository -v $(pwd)/distilbert-base-uncased-emotion:/repository starlette-transformers:cpu
4243
```
4344

4445

@@ -56,6 +57,7 @@ curl --request POST \
5657
}'
5758
```
5859

60+
5961
---
6062

6163
## 🛠️ Environment variables

dockerfiles/pytorch/cpu/Dockerfile

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
FROM ubuntu:22.04
2+
3+
LABEL maintainer="Hugging Face"
4+
5+
ENV DEBIAN_FRONTEND=noninteractive
6+
7+
RUN apt-get update \
8+
&& apt-get -y upgrade --only-upgrade systemd openssl cryptsetup \
9+
&& apt-get install -y \
10+
bzip2 \
11+
curl \
12+
git \
13+
git-lfs \
14+
tar \
15+
gcc \
16+
g++ \
17+
# audio
18+
libsndfile1-dev \
19+
ffmpeg \
20+
&& apt-get clean autoremove --yes \
21+
&& rm -rf /var/lib/{apt,dpkg,cache,log}
22+
23+
# install micromamba
24+
ENV MAMBA_ROOT_PREFIX=/opt/conda
25+
ENV PATH=/opt/conda/bin:$PATH
26+
RUN curl -L https://micromamba.snakepit.net/api/micromamba/linux-64/latest | tar -xj "bin/micromamba" \
27+
&& touch /root/.bashrc \
28+
&& ./bin/micromamba shell init -s bash -p /opt/conda \
29+
&& grep -v '[ -z "\$PS1" ] && return' /root/.bashrc > /opt/conda/bashrc
30+
31+
WORKDIR /app
32+
33+
# install base python dependencies
34+
COPY dockerfiles/pytorch/cpu/environment.yaml /app/environment.yaml
35+
RUN micromamba install -y -n base -f environment.yaml \
36+
&& rm environment.yaml \
37+
&& micromamba clean --all --yes
38+
39+
# install huggingface inference toolkit
40+
COPY requirements.txt /tmp/requirements.txt
41+
RUN pip install --no-cache-dir -r /tmp/requirements.txt && rm /tmp/requirements.txt
42+
43+
# copy application
44+
COPY src/huggingface_inference_toolkit huggingface_inference_toolkit
45+
COPY src/huggingface_inference_toolkit/webservice_starlette.py webservice_starlette.py
46+
47+
# copy entrypoint and change permissions
48+
COPY scripts/entrypoint.sh entrypoint.sh
49+
RUN chmod +x entrypoint.sh
50+
51+
# run app
52+
ENTRYPOINT ["/bin/bash", "entrypoint.sh"]
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
name: base
2+
channels:
3+
- conda-forge
4+
dependencies:
5+
- python=3.9.13
6+
- pytorch::pytorch=1.13.1=py3.9_cpu_0
7+
- pip:
8+
- transformers[sklearn,sentencepiece,audio,vision]==4.27.2
9+
- sentence_transformers==2.2.2
10+
- torchvision==0.14.1
11+
- diffusers==0.14.0
12+
- accelerate==0.17.1

dockerfiles/pytorch/gpu/Dockerfile

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
FROM nvidia/cuda:11.7.0-devel-ubuntu22.04
2+
3+
LABEL maintainer="Hugging Face"
4+
5+
ENV DEBIAN_FRONTEND=noninteractive
6+
7+
RUN apt-get update \
8+
&& apt-get -y upgrade --only-upgrade systemd openssl cryptsetup \
9+
&& apt-get install -y \
10+
bzip2 \
11+
curl \
12+
git \
13+
git-lfs \
14+
tar \
15+
gcc \
16+
g++ \
17+
# audio
18+
libsndfile1-dev \
19+
ffmpeg \
20+
&& apt-get clean autoremove --yes \
21+
&& rm -rf /var/lib/{apt,dpkg,cache,log}
22+
23+
# install micromamba
24+
ENV MAMBA_ROOT_PREFIX=/opt/conda
25+
ENV PATH=/opt/conda/bin:$PATH
26+
ENV LD_LIBRARY_PATH="/opt/conda/lib:${LD_LIBRARY_PATH}"
27+
28+
RUN curl -L https://micromamba.snakepit.net/api/micromamba/linux-64/latest | tar -xj "bin/micromamba" \
29+
&& touch /root/.bashrc \
30+
&& ./bin/micromamba shell init -s bash -p /opt/conda \
31+
&& grep -v '[ -z "\$PS1" ] && return' /root/.bashrc > /opt/conda/bashrc
32+
33+
WORKDIR /app
34+
35+
# install base python dependencies
36+
COPY dockerfiles/pytorch/gpu/environment.yaml /app/environment.yaml
37+
RUN micromamba install -y -n base -f environment.yaml \
38+
&& rm environment.yaml \
39+
&& micromamba clean --all --yes
40+
41+
# install huggingface inference toolkit
42+
COPY requirements.txt /tmp/requirements.txt
43+
RUN pip install --no-cache-dir -r /tmp/requirements.txt && rm /tmp/requirements.txt
44+
45+
# copy application
46+
COPY src/huggingface_inference_toolkit huggingface_inference_toolkit
47+
COPY src/huggingface_inference_toolkit/webservice_starlette.py webservice_starlette.py
48+
49+
# copy entrypoint and change permissions
50+
COPY scripts/entrypoint.sh entrypoint.sh
51+
RUN chmod +x entrypoint.sh
52+
53+
# run app
54+
ENTRYPOINT ["/bin/bash", "entrypoint.sh"]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
name: base
2+
channels:
3+
- conda-forge
4+
dependencies:
5+
- python=3.9.13
6+
- nvidia::cudatoolkit=11.7
7+
- pytorch::pytorch=1.13.1=py3.9_cuda11.7*
8+
- pip:
9+
- transformers[sklearn,sentencepiece,audio,vision]==4.27.2
10+
- sentence_transformers==2.2.2
11+
- torchvision==0.14.1
12+
- diffusers==0.14.0
13+
- accelerate==0.17.1

dockerfiles/robyn/Dockerfile.cpu

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)