Keep image generic; move startup settings into run.sh/compose
All checks were successful
Docker Build and Push / docker (push) Successful in 1h29m12s

This commit is contained in:
2026-10-26 18:53:54 +08:00
parent 9f523e208a
commit d0e260c322
4 changed files with 25 additions and 17 deletions

View File

@@ -4,13 +4,13 @@
# - Llama-4-Scout-17B-16E-Instruct(BF16,TP8,8 卡)
# - Llama-4-Maverick-17B-128E-Instruct-FP8(FP8,TP8+PP2,16 卡)
#
# 模型权重不打进镜像,运行时挂载模型目录;容器启动后读取 config.json
# 自动判断 Scout / Maverick,并选择对应的 TP / PP / 端口。
# 镜像只包含运行时依赖和 Llama 4 补丁,不设置启动命令、ENV、WORKDIR 或 EXPOSE;
# 模型路径、端口、TP/PP、GPU、挂载等全部由 run.sh / docker-compose.yml 在启动时传入。
#
# 构建:
# docker build -t llama4-bi150:2026-10-26 .
#
# 运行:
# 运行(由 run.sh 传入 entrypoint 和全部参数):
# ./run.sh /mnt/disk0/models/LLM-Research/Llama-4-Scout-17B-16E-Instruct
# ./run.sh /mnt/disk0/models/LLM-Research/Llama-4-Maverick-17B-128E-Instruct-FP8
#
@@ -35,16 +35,5 @@ RUN chmod +x /usr/local/bin/llama4-entrypoint.sh \
&& chmod +x /opt/llama4/detect_model.py \
&& python3 /opt/llama4/apply_patch.py
ENV MODEL_PATH=/models/llama4 \
AUTO_DETECT=1 \
HOST=0.0.0.0 \
MAX_MODEL_LEN=4096 \
MAX_NUM_SEQS=1 \
GPU_MEM_UTIL=0.90 \
ENFORCE_EAGER=1 \
PYTHONUNBUFFERED=1
WORKDIR /opt/llama4
EXPOSE 8091 8092
ENTRYPOINT ["/usr/local/bin/llama4-entrypoint.sh"]
# 故意不设置 ENV / WORKDIR / EXPOSE / ENTRYPOINT / CMD:
# 镜像保持通用,启动方式由 run.sh 或 docker-compose.yml 决定。

View File

@@ -78,6 +78,11 @@ MODEL_HOST_DIR=/mnt/disk0/models/LLM-Research/Llama-4-Maverick-17B-128E-Instruct
GPUs : 0,1,2,...,15
```
> 镜像本身不设置 `ENTRYPOINT` / `CMD` / `ENV` / `WORKDIR` / `EXPOSE`,
> 启动方式、模型路径、端口、TP/PP、GPU 和挂载全部由 `run.sh` 或 `docker-compose.yml` 传入。
> 如果直接 `docker run`,需要显式指定:
> `--entrypoint /usr/local/bin/llama4-entrypoint.sh --workdir /opt/llama4`。
### 2.1 自动检测规则
`detect_model.py` 读取 `config.json`:

View File

@@ -6,6 +6,13 @@ services:
image: llama4-bi150:${TAG:-2026-10-26}
container_name: llama4
# 镜像本身不设置启动命令,启动方式全部由这里决定。
entrypoint: ["/usr/local/bin/llama4-entrypoint.sh"]
working_dir: /opt/llama4
expose:
- "8091"
- "8092"
# vLLM 多卡 NCCL / 端口直通
network_mode: host
ipc: host
@@ -21,7 +28,7 @@ services:
environment:
MODEL_PATH: /models/llama4
AUTO_DETECT: "${AUTO_DETECT:-1}"
HOST: 0.0.0.0
HOST: "${HOST:-0.0.0.0}"
# 默认暴露全部 16 张卡;entrypoint 会根据模型选择实际 TP*PP。
CUDA_VISIBLE_DEVICES: "${GPUS:-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}"
@@ -37,6 +44,7 @@ services:
MAX_NUM_SEQS: "${MAX_NUM_SEQS:-1}"
GPU_MEM_UTIL: "${GPU_MEM_UTIL:-0.90}"
ENFORCE_EAGER: "${ENFORCE_EAGER:-1}"
PYTHONUNBUFFERED: "1"
EXTRA_ARGS: "${EXTRA_ARGS:-}"
ulimits:

6
run.sh
View File

@@ -77,6 +77,7 @@ eval "${DETECT_OUTPUT}"
MODEL_KIND="${DETECTED_MODEL_KIND}"
IMAGE="${IMAGE:-llama4-bi150:2026-10-26}"
NAME="${NAME:-llama4-${MODEL_KIND}}"
HOST="${HOST:-0.0.0.0}"
PORT="${PORT:-${DETECTED_PORT}}"
MODEL_MOUNT="${MODEL_MOUNT:-/models/llama4}"
SERVED_NAME="${SERVED_NAME:-${DETECTED_SERVED_NAME}}"
@@ -122,6 +123,9 @@ fi
DOCKER_RUN=(
docker run -d --name "${NAME}"
--entrypoint /usr/local/bin/llama4-entrypoint.sh
--workdir /opt/llama4
--expose "${PORT}"
--privileged
--pid host
--network host
@@ -134,6 +138,7 @@ DOCKER_RUN=(
-e MODEL_PATH="${MODEL_MOUNT}"
-e AUTO_DETECT="${AUTO_DETECT}"
-e MODEL_KIND="${MODEL_KIND}"
-e HOST="${HOST}"
-e SERVED_NAME="${SERVED_NAME}"
-e PORT="${PORT}"
-e TP="${TP}"
@@ -142,6 +147,7 @@ DOCKER_RUN=(
-e MAX_NUM_SEQS="${MAX_NUM_SEQS}"
-e GPU_MEM_UTIL="${GPU_MEM_UTIL}"
-e ENFORCE_EAGER="${ENFORCE_EAGER}"
-e PYTHONUNBUFFERED=1
-e EXTRA_ARGS="${EXTRA_ARGS}"
"${DOCKER_EXTRA[@]}"
--restart unless-stopped