Skip to content

Commit 905f592

Browse files
authored
Merge pull request #6 from LJ-Hao/main
add:VLM docker
2 parents 74f62db + 7284714 commit 905f592

19 files changed

+1431
-18
lines changed

.github/workflows/RK3576-Deepseek-R1-Distill-Qwen.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
push:
55
branches: [ main, master ]
66
paths:
7-
- 'src/**'
7+
- 'src/llm/**'
88
- 'docker/RK3576/LLM/DeepSeek-R1-Distill-Qwen.dockerfile'
99
- '.github/workflows/RK3576-Deepseek-R1-Distill-Qwen.yml'
1010
workflow_dispatch:
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
name: Build and Push Qwen2.5-VL-RK3576 Series
2+
3+
on:
4+
push:
5+
branches: [ main, master ]
6+
paths:
7+
- 'src/vlm/**'
8+
- 'docker/RK3576/VLM/Qwen2.5-VL.dockerfile'
9+
- '.github/workflows/RK3576-Qwen2.5-VL.yml'
10+
- 'lib/**'
11+
workflow_dispatch:
12+
13+
env:
14+
REGISTRY: ghcr.io
15+
IMAGE_BASE_NAME: ${{ github.repository_owner }}/RK3576-Qwen2.5-VL
16+
17+
jobs:
18+
build-and-push:
19+
runs-on: ubuntu-latest
20+
permissions:
21+
contents: read
22+
packages: write
23+
24+
strategy:
25+
fail-fast: false
26+
matrix:
27+
include:
28+
- alias: "3b-w4a16"
29+
vision_file: "Qwen2.5_VL_3B_VISION_RK3576.rknn"
30+
vision_url: "https://huggingface.co/JiahaoLi/Qwen2.5-VL-RK3576/resolve/main/Qwen2.5_VL_3B_VISION_RK3576.rknn"
31+
llm_file: "Qwen2.5-VL-3B-W4A16_LEVEL1_RK3576.rkllm"
32+
llm_url: "https://huggingface.co/JiahaoLi/Qwen2.5-VL-RK3576/resolve/main/Qwen2.5-VL-3B-W4A16_LEVEL1_RK3576.rkllm"
33+
34+
steps:
35+
- name: Checkout repository
36+
uses: actions/checkout@v4
37+
with:
38+
lfs: true
39+
40+
- name: Force LFS Pull
41+
run: |
42+
git lfs install
43+
git lfs pull
44+
45+
- name: Free Disk Space
46+
uses: jlumbroso/free-disk-space@main
47+
with:
48+
tool-cache: true
49+
android: true
50+
dotnet: true
51+
large-packages: true
52+
docker-images: true
53+
54+
- name: Set up QEMU
55+
uses: docker/setup-qemu-action@v3
56+
with:
57+
platforms: arm64
58+
59+
- name: Set up Docker Buildx
60+
uses: docker/setup-buildx-action@v3
61+
62+
- name: Log in to GHCR
63+
uses: docker/login-action@v3
64+
with:
65+
registry: ${{ env.REGISTRY }}
66+
username: ${{ github.actor }}
67+
password: ${{ secrets.GITHUB_TOKEN }}
68+
69+
- name: Extract metadata
70+
id: meta
71+
uses: docker/metadata-action@v5
72+
with:
73+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_BASE_NAME }}
74+
tags: |
75+
type=raw,value=${{ matrix.alias }}-latest
76+
77+
- name: Build and push
78+
uses: docker/build-push-action@v5
79+
with:
80+
context: .
81+
file: ./docker/RK3576/VLM/Qwen2.5-VL.dockerfile
82+
# 重要:不指定 target,确保所有指令被执行
83+
push: true
84+
platforms: linux/arm64
85+
provenance: false
86+
build-args: |
87+
LLM_URL=${{ matrix.llm_url }}
88+
LLM_FILE=${{ matrix.llm_file }}
89+
VISION_URL=${{ matrix.vision_url }}
90+
VISION_FILE=${{ matrix.vision_file }}
91+
tags: ${{ steps.meta.outputs.tags }}
92+
labels: ${{ steps.meta.outputs.labels }}
93+
cache-from: type=gha
94+
cache-to: type=gha,mode=max

.github/workflows/RK3588-Deepseek-R1-Distill-Qwen.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
push:
55
branches: [ main, master ]
66
paths:
7-
- 'src/**'
7+
- 'src/llm/**'
88
- 'docker/RK3588/LLM/DeepSeek-R1-Distill-Qwen.dockerfile'
99
- '.github/workflows/RK3588-Deepseek-R1-Distill-Qwen.yml'
1010
workflow_dispatch:
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
name: Build and Push Qwen2-VL-RK3588 Series
2+
3+
on:
4+
push:
5+
branches: [ main, master ]
6+
paths:
7+
- 'src/vlm/**'
8+
- 'docker/RK3588/VLM/Qwen2-VL.dockerfile'
9+
- '.github/workflows/RK3588-Qwen2-VL.yml'
10+
- 'lib/**'
11+
workflow_dispatch:
12+
13+
env:
14+
REGISTRY: ghcr.io
15+
IMAGE_BASE_NAME: ${{ github.repository_owner }}/RK3588-Qwen2-VL
16+
17+
jobs:
18+
build-and-push:
19+
runs-on: ubuntu-latest
20+
permissions:
21+
contents: read
22+
packages: write
23+
24+
strategy:
25+
fail-fast: false
26+
matrix:
27+
include:
28+
- alias: "7b-w8a8"
29+
vision_file: "Qwen2_VL_7B_VISION_RK3588.rknn"
30+
vision_url: "https://huggingface.co/JiahaoLi/Qwen2-VL-RK3588/resolve/main/Qwen2_VL_7B_VISION_RK3588.rknn"
31+
llm_file: "Qwen2_VL_7B_LLM_RK3588.rkllm"
32+
llm_url: "https://huggingface.co/JiahaoLi/Qwen2-VL-RK3588/resolve/main/Qwen2-VL-7B_LLM_W8A8_RK3588.rkllm"
33+
34+
35+
- alias: "2b-w8a8"
36+
vision_file: "Qwen2_VL_2B_VISION_RK3588.rknn"
37+
vision_url: "https://huggingface.co/JiahaoLi/Qwen2-VL-RK3588/resolve/main/Qwen2-VL-2B_VISION_RK3588.rknn"
38+
llm_file: "Qwen2_VL_2B_LLM_RK3588.rkllm"
39+
llm_url: "https://huggingface.co/JiahaoLi/Qwen2-VL-RK3588/resolve/main/Qwen2-VL-2B_LLM_W8A8_RK3588.rkllm"
40+
41+
steps:
42+
- name: Checkout repository
43+
uses: actions/checkout@v4
44+
with:
45+
lfs: true
46+
47+
- name: Force LFS Pull
48+
run: |
49+
git lfs install
50+
git lfs pull
51+
52+
- name: Free Disk Space
53+
uses: jlumbroso/free-disk-space@main
54+
with:
55+
tool-cache: true
56+
android: true
57+
dotnet: true
58+
large-packages: true
59+
docker-images: true
60+
61+
- name: Set up QEMU
62+
uses: docker/setup-qemu-action@v3
63+
with:
64+
platforms: arm64
65+
66+
- name: Set up Docker Buildx
67+
uses: docker/setup-buildx-action@v3
68+
69+
- name: Log in to GHCR
70+
uses: docker/login-action@v3
71+
with:
72+
registry: ${{ env.REGISTRY }}
73+
username: ${{ github.actor }}
74+
password: ${{ secrets.GITHUB_TOKEN }}
75+
76+
- name: Extract metadata
77+
id: meta
78+
uses: docker/metadata-action@v5
79+
with:
80+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_BASE_NAME }}
81+
tags: |
82+
type=raw,value=${{ matrix.alias }}-latest
83+
84+
- name: Build and push
85+
uses: docker/build-push-action@v5
86+
with:
87+
context: .
88+
file: ./docker/RK3588/VLM/Qwen2-VL.dockerfile
89+
# 重要:不指定 target,确保所有指令被执行
90+
push: true
91+
platforms: linux/arm64
92+
provenance: false
93+
build-args: |
94+
LLM_URL=${{ matrix.llm_url }}
95+
LLM_FILE=${{ matrix.llm_file }}
96+
VISION_URL=${{ matrix.vision_url }}
97+
VISION_FILE=${{ matrix.vision_file }}
98+
tags: ${{ steps.meta.outputs.tags }}
99+
labels: ${{ steps.meta.outputs.labels }}
100+
cache-from: type=gha
101+
cache-to: type=gha,mode=max

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
__pycache__/
33
*.py[cod]
44
*$py.class
5-
*.so
65
*.egg-info/
76
dist/
87
build/

docker/RK3576/LLM/DeepSeek-R1-Distill-Qwen.dockerfile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ WORKDIR /app
99
RUN mkdir -p /app/models
1010

1111
# 安装依赖
12-
COPY ./src/fastapi_server_requirements_llm.txt /app/requirements.txt
12+
COPY ./src/llm/requirements.txt /app/requirements.txt
1313
RUN pip install --no-cache-dir -r /app/requirements.txt
1414

1515
# 拷贝运行时库和工具
16-
COPY ./src/librkllmrt.so /usr/lib/librkllmrt.so
16+
COPY ./lib/librkllmrt.so /usr/lib/librkllmrt.so
1717
COPY ./src/fix_freq_rk3576.sh /app/fix_freq_rk3576.sh
1818
RUN chmod +x /app/fix_freq_rk3576.sh
1919

@@ -27,11 +27,11 @@ RUN if [ -n "${MODEL_URL}" ]; then \
2727
wget --progress=dot:giga "${MODEL_URL}" -O "/app/models/${MODEL_FILE}"; \
2828
fi
2929

30-
COPY ./src/fastapi_server_llm.py /app/
30+
COPY ./src/llm/fastapi_server_llm.py /app/
3131

3232
# 将 ARG 转为 ENV,这样 CMD 才能读取到
3333
ENV RKLLM_MODEL_PATH=/app/models/${MODEL_FILE}
3434

35-
EXPOSE 8080
35+
EXPOSE 8001
3636

3737
CMD ["sh", "-c", "python3 /app/fastapi_server_llm.py --rkllm_model_path ${RKLLM_MODEL_PATH} --target_platform rk3576"]
File renamed without changes.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# 第一阶段:环境准备
2+
FROM python:3.10-slim AS base
3+
4+
RUN apt-get update && \
5+
apt-get install -y wget curl git sudo libgomp1 && \
6+
rm -rf /var/lib/apt/lists/*
7+
8+
WORKDIR /app
9+
RUN mkdir -p /app/models
10+
11+
# 安装依赖
12+
COPY ./src/vlm/requirements.txt /app/requirements.txt
13+
COPY ./src/vlm/fastapi_server_vlm.py /app/fastapi_server_vlm.py
14+
RUN pip install --no-cache-dir -r /app/requirements.txt
15+
16+
# 拷贝运行时库和工具
17+
COPY ./lib/librkllmrt.so /usr/lib/librkllmrt.so
18+
COPY ./lib/librkllm_service.so /usr/lib/librkllm_service.so
19+
COPY ./lib/librknnrt.so /usr/lib/librknnrt.so
20+
21+
22+
COPY ./src/fix_freq_rk3576.sh /app/fix_freq_rk3576.sh
23+
RUN chmod +x /app/fix_freq_rk3576.sh
24+
25+
# --- 最终阶段 ---
26+
FROM base AS final
27+
ARG LLM_URL
28+
ARG LLM_FILE # 改为LLM_FILE
29+
ARG VISION_URL
30+
ARG VISION_FILE # 改为VISION_FILE
31+
32+
# 检查变量是否设置,如果设置了就下载模型
33+
RUN if [ -n "${LLM_URL}" ] && [ -n "${LLM_FILE}" ]; then \
34+
wget --progress=dot:giga "${LLM_URL}" -O "/app/models/${LLM_FILE}"; \
35+
else \
36+
echo "LLM_URL or LLM_FILE not set, skipping LLM model download"; \
37+
fi
38+
39+
RUN if [ -n "${VISION_URL}" ] && [ -n "${VISION_FILE}" ]; then \
40+
wget --progress=dot:giga "${VISION_URL}" -O "/app/models/${VISION_FILE}"; \
41+
else \
42+
echo "VISION_URL or VISION_FILE not set, skipping vision model download"; \
43+
fi
44+
45+
# 将 ARG 转为 ENV,这样 CMD 才能读取到
46+
ENV LLM_MODEL_PATH=/app/models/${LLM_FILE}
47+
ENV VISION_MODEL_PATH=/app/models/${VISION_FILE}
48+
49+
EXPOSE 8002
50+
51+
CMD ["sh", "-c", "python3 /app/fastapi_server_vlm.py --llm_model ${LLM_MODEL_PATH} --encoder_model ${VISION_MODEL_PATH}"]

docker/RK3588/LLM/DeepSeek-R1-Distill-Qwen.dockerfile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ WORKDIR /app
99
RUN mkdir -p /app/models
1010

1111
# 安装依赖
12-
COPY ./src/fastapi_server_requirements_llm.txt /app/requirements.txt
12+
COPY ./src/llm/requirements.txt /app/requirements.txt
1313
RUN pip install --no-cache-dir -r /app/requirements.txt
1414

1515
# 拷贝运行时库和工具
16-
COPY ./src/librkllmrt.so /usr/lib/librkllmrt.so
16+
COPY ./lib/librkllmrt.so /usr/lib/librkllmrt.so
1717
COPY ./src/fix_freq_rk3588.sh /app/fix_freq_rk3588.sh
1818
RUN chmod +x /app/fix_freq_rk3588.sh
1919

@@ -27,11 +27,11 @@ RUN if [ -n "${MODEL_URL}" ]; then \
2727
wget --progress=dot:giga "${MODEL_URL}" -O "/app/models/${MODEL_FILE}"; \
2828
fi
2929

30-
COPY ./src/fastapi_server_llm.py /app/
30+
COPY ./src/llm/fastapi_server_llm.py /app/
3131

3232
# 将 ARG 转为 ENV,这样 CMD 才能读取到
3333
ENV RKLLM_MODEL_PATH=/app/models/${MODEL_FILE}
3434

35-
EXPOSE 8080
35+
EXPOSE 8001
3636

3737
CMD ["sh", "-c", "python3 /app/fastapi_server_llm.py --rkllm_model_path ${RKLLM_MODEL_PATH} --target_platform rk3588"]
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# 第一阶段:环境准备
2+
FROM python:3.10-slim AS base
3+
4+
RUN apt-get update && \
5+
apt-get install -y wget curl git sudo libgomp1 && \
6+
rm -rf /var/lib/apt/lists/*
7+
8+
WORKDIR /app
9+
RUN mkdir -p /app/models
10+
11+
# 安装依赖
12+
COPY ./src/vlm/requirements.txt /app/requirements.txt
13+
COPY ./src/vlm/fastapi_server_vlm.py /app/fastapi_server_vlm.py
14+
RUN pip install --no-cache-dir -r /app/requirements.txt
15+
16+
# 拷贝运行时库和工具
17+
COPY ./lib/librkllmrt.so /usr/lib/librkllmrt.so
18+
COPY ./lib/librkllm_service.so /usr/lib/librkllm_service.so
19+
COPY ./lib/librknnrt.so /usr/lib/librknnrt.so
20+
21+
22+
COPY ./src/fix_freq_rk3588.sh /app/fix_freq_rk3588.sh
23+
RUN chmod +x /app/fix_freq_rk3588.sh
24+
25+
# --- 最终阶段 ---
26+
FROM base AS final
27+
ARG LLM_URL
28+
ARG LLM_FILE # 改为LLM_FILE
29+
ARG VISION_URL
30+
ARG VISION_FILE # 改为VISION_FILE
31+
32+
# 检查变量是否设置,如果设置了就下载模型
33+
RUN if [ -n "${LLM_URL}" ] && [ -n "${LLM_FILE}" ]; then \
34+
wget --progress=dot:giga "${LLM_URL}" -O "/app/models/${LLM_FILE}"; \
35+
else \
36+
echo "LLM_URL or LLM_FILE not set, skipping LLM model download"; \
37+
fi
38+
39+
RUN if [ -n "${VISION_URL}" ] && [ -n "${VISION_FILE}" ]; then \
40+
wget --progress=dot:giga "${VISION_URL}" -O "/app/models/${VISION_FILE}"; \
41+
else \
42+
echo "VISION_URL or VISION_FILE not set, skipping vision model download"; \
43+
fi
44+
45+
COPY ./src/vlm/fastapi_server_vlm.py /app/
46+
47+
# 将 ARG 转为 ENV,这样 CMD 才能读取到
48+
ENV LLM_MODEL_PATH=/app/models/${LLM_FILE}
49+
ENV VISION_MODEL_PATH=/app/models/${VISION_FILE}
50+
51+
EXPOSE 8002
52+
53+
CMD ["sh", "-c", "python3 /app/fastapi_server_vlm.py --llm_model ${LLM_MODEL_PATH} --encoder_model ${VISION_MODEL_PATH}"]

0 commit comments

Comments
 (0)