Skip to content

Commit d0ab76f

Browse files
authored
Add vLLM Docker Github Action (#14)
* init draft of ga Signed-off-by: Rohin Garg <rohin@character.ai> * finished ga/dockerfile setup Signed-off-by: Rohin Garg <rohin@character.ai> * add manual trigger for workflow Signed-off-by: Rohin Garg <rohin@character.ai> * temp add pull req as trigger Signed-off-by: Rohin Garg <rohin@character.ai> * fixed REGION env variable Signed-off-by: Rohin Garg <rohin@character.ai> * add cleanup steps to free up disk space Signed-off-by: Rohin Garg <rohin@character.ai> * turned off cache to optimize disk usage * Update Dockerfile_internal to copy to /mnt/ * use larger runner * rollback runner change and make cleaning more aggressive * add more disk cleanup steps * update to use correct larger runner * add caching back, clean up the cleaning code * add fail-fast false * added flag to prevent recompilation of CUDA kernels Signed-off-by: Rohin Garg <rohin@character.ai> * add separate auth steps for staging & prod, remove disk space cleanup step * share image between staging and prod * fix build * remove pull request trigger --------- Signed-off-by: Rohin Garg <rohin@character.ai>
1 parent 3786131 commit d0ab76f

File tree

3 files changed

+113
-1
lines changed

3 files changed

+113
-1
lines changed

.github/workflows/docker-publish.yml

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
name: Build & Publish vLLM Docker
2+
on:
3+
push:
4+
branches:
5+
- main
6+
workflow_dispatch:
7+
permissions:
8+
id-token: write
9+
contents: read
10+
concurrency:
11+
group: deployment
12+
cancel-in-progress: false
13+
jobs:
14+
build-and-push:
15+
strategy:
16+
fail-fast: false
17+
runs-on: large_ubuntu_4cpu
18+
timeout-minutes: 360
19+
env:
20+
REGION: us-central1
21+
REPO: vllm
22+
IMAGE: vllm-forked
23+
STAGING_PROJECT: character-ai-staging
24+
PROD_PROJECT: character-ai
25+
steps:
26+
- name: Checkout code
27+
uses: actions/checkout@v4
28+
- name: Check disk space
29+
run: |
30+
sudo dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -nr | head
31+
df . -h
32+
sudo du /usr/ -hx -d 4 --threshold=1G | sort -hr | head
33+
34+
- name: Determine tags
35+
id: tags
36+
run: |
37+
SHA=$(git rev-parse --short=7 HEAD)
38+
echo "sha=$SHA" >> $GITHUB_OUTPUT
39+
echo "tags=${SHA},latest" >> $GITHUB_OUTPUT
40+
41+
- name: Authenticate to GCP Staging
42+
uses: google-github-actions/auth@v2
43+
with:
44+
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER_STAGING }}
45+
service_account: ${{ secrets.GCP_SA_EMAIL_STAGING }}
46+
47+
- name: "Set up Cloud SDK"
48+
uses: "google-github-actions/setup-gcloud@v2"
49+
with:
50+
install_components: "beta"
51+
52+
- name: Configure Docker credential helper for build
53+
run: |
54+
gcloud --quiet auth configure-docker ${{ env.REGION }}-docker.pkg.dev
55+
56+
# Build the image locally first
57+
- name: Build Docker image
58+
run: |
59+
docker build \
60+
-f ./docker/Dockerfile_internal \
61+
--build-arg HF_HOME=/huggingface/cache \
62+
-t local-image:${{ steps.tags.outputs.sha }} \
63+
.
64+
65+
# Tag and push to staging
66+
- name: Tag and Push to Staging
67+
run: |
68+
docker tag local-image:${{ steps.tags.outputs.sha }} ${{ env.REGION }}-docker.pkg.dev/${{ env.STAGING_PROJECT }}/${{ env.REPO }}/${{ env.IMAGE }}:${{ steps.tags.outputs.sha }}
69+
docker tag local-image:${{ steps.tags.outputs.sha }} ${{ env.REGION }}-docker.pkg.dev/${{ env.STAGING_PROJECT }}/${{ env.REPO }}/${{ env.IMAGE }}:latest
70+
71+
docker push ${{ env.REGION }}-docker.pkg.dev/${{ env.STAGING_PROJECT }}/${{ env.REPO }}/${{ env.IMAGE }}:${{ steps.tags.outputs.sha }}
72+
docker push ${{ env.REGION }}-docker.pkg.dev/${{ env.STAGING_PROJECT }}/${{ env.REPO }}/${{ env.IMAGE }}:latest
73+
74+
# Re-authenticate to prod for prod pushes
75+
- name: Authenticate to GCP Prod
76+
uses: google-github-actions/auth@v2
77+
with:
78+
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER_PROD }}
79+
service_account: ${{ secrets.GCP_SA_EMAIL_PROD }}
80+
81+
- name: "Set up Cloud SDK for Prod"
82+
uses: "google-github-actions/setup-gcloud@v2"
83+
with:
84+
install_components: "beta"
85+
86+
- name: Configure Docker credential helper for Prod
87+
run: |
88+
gcloud --quiet auth configure-docker ${{ env.REGION }}-docker.pkg.dev
89+
gcloud --quiet auth configure-docker gcr.io
90+
91+
# Push same image to prod
92+
- name: Push to Prod and GCR
93+
run: |
94+
docker tag local-image:${{ steps.tags.outputs.sha }} ${{ env.REGION }}-docker.pkg.dev/${{ env.PROD_PROJECT }}/${{ env.REPO }}/${{ env.IMAGE }}:${{ steps.tags.outputs.sha }}
95+
docker tag local-image:${{ steps.tags.outputs.sha }} ${{ env.REGION }}-docker.pkg.dev/${{ env.PROD_PROJECT }}/${{ env.REPO }}/${{ env.IMAGE }}:latest
96+
docker tag local-image:${{ steps.tags.outputs.sha }} gcr.io/${{ env.PROD_PROJECT }}/vllm/${{ env.IMAGE }}:${{ steps.tags.outputs.sha }}
97+
docker tag local-image:${{ steps.tags.outputs.sha }} gcr.io/${{ env.PROD_PROJECT }}/vllm/${{ env.IMAGE }}:latest
98+
99+
docker push ${{ env.REGION }}-docker.pkg.dev/${{ env.PROD_PROJECT }}/${{ env.REPO }}/${{ env.IMAGE }}:${{ steps.tags.outputs.sha }}
100+
docker push ${{ env.REGION }}-docker.pkg.dev/${{ env.PROD_PROJECT }}/${{ env.REPO }}/${{ env.IMAGE }}:latest
101+
docker push gcr.io/${{ env.PROD_PROJECT }}/vllm/${{ env.IMAGE }}:${{ steps.tags.outputs.sha }}
102+
docker push gcr.io/${{ env.PROD_PROJECT }}/vllm/${{ env.IMAGE }}:latest

MANIFEST.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ include requirements/cpu.txt
77
include CMakeLists.txt
88

99
recursive-include cmake *
10-
recursive-include csrc *
10+
recursive-include csrc *

docker/Dockerfile_internal

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM us-central1-docker.pkg.dev/character-ai/vllm/vllm-forked:latest as builder
2+
3+
COPY . /mnt/vllm
4+
RUN pip uninstall -y vllm
5+
RUN VLLM_USE_PRECOMPILED=1 pip install /mnt/vllm
6+
RUN rm -rf /mnt/vllm
7+
RUN python3 -c "import vllm; print('Custom vLLM loaded successfully')"
8+
9+
10+
ENV HF_HOME=/huggingface/cache

0 commit comments

Comments
 (0)