Keep image generic; move startup settings into run.sh/compose
This commit is contained in:
21
Dockerfile
21
Dockerfile
@@ -4,13 +4,13 @@
|
|||||||
# - Llama-4-Scout-17B-16E-Instruct(BF16,TP8,8 卡)
|
# - Llama-4-Scout-17B-16E-Instruct(BF16,TP8,8 卡)
|
||||||
# - Llama-4-Maverick-17B-128E-Instruct-FP8(FP8,TP8+PP2,16 卡)
|
# - Llama-4-Maverick-17B-128E-Instruct-FP8(FP8,TP8+PP2,16 卡)
|
||||||
#
|
#
|
||||||
# 模型权重不打进镜像,运行时挂载模型目录;容器启动后读取 config.json
|
# 镜像只包含运行时依赖和 Llama 4 补丁,不设置启动命令、ENV、WORKDIR 或 EXPOSE;
|
||||||
# 自动判断 Scout / Maverick,并选择对应的 TP / PP / 端口。
|
# 模型路径、端口、TP/PP、GPU、挂载等全部由 run.sh / docker-compose.yml 在启动时传入。
|
||||||
#
|
#
|
||||||
# 构建:
|
# 构建:
|
||||||
# docker build -t llama4-bi150:2026-10-26 .
|
# 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-Scout-17B-16E-Instruct
|
||||||
# ./run.sh /mnt/disk0/models/LLM-Research/Llama-4-Maverick-17B-128E-Instruct-FP8
|
# ./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 \
|
&& chmod +x /opt/llama4/detect_model.py \
|
||||||
&& python3 /opt/llama4/apply_patch.py
|
&& python3 /opt/llama4/apply_patch.py
|
||||||
|
|
||||||
ENV MODEL_PATH=/models/llama4 \
|
# 故意不设置 ENV / WORKDIR / EXPOSE / ENTRYPOINT / CMD:
|
||||||
AUTO_DETECT=1 \
|
# 镜像保持通用,启动方式由 run.sh 或 docker-compose.yml 决定。
|
||||||
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"]
|
|
||||||
|
|||||||
@@ -78,6 +78,11 @@ MODEL_HOST_DIR=/mnt/disk0/models/LLM-Research/Llama-4-Maverick-17B-128E-Instruct
|
|||||||
GPUs : 0,1,2,...,15
|
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 自动检测规则
|
### 2.1 自动检测规则
|
||||||
|
|
||||||
`detect_model.py` 读取 `config.json`:
|
`detect_model.py` 读取 `config.json`:
|
||||||
|
|||||||
@@ -6,6 +6,13 @@ services:
|
|||||||
image: llama4-bi150:${TAG:-2026-10-26}
|
image: llama4-bi150:${TAG:-2026-10-26}
|
||||||
container_name: llama4
|
container_name: llama4
|
||||||
|
|
||||||
|
# 镜像本身不设置启动命令,启动方式全部由这里决定。
|
||||||
|
entrypoint: ["/usr/local/bin/llama4-entrypoint.sh"]
|
||||||
|
working_dir: /opt/llama4
|
||||||
|
expose:
|
||||||
|
- "8091"
|
||||||
|
- "8092"
|
||||||
|
|
||||||
# vLLM 多卡 NCCL / 端口直通
|
# vLLM 多卡 NCCL / 端口直通
|
||||||
network_mode: host
|
network_mode: host
|
||||||
ipc: host
|
ipc: host
|
||||||
@@ -21,7 +28,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
MODEL_PATH: /models/llama4
|
MODEL_PATH: /models/llama4
|
||||||
AUTO_DETECT: "${AUTO_DETECT:-1}"
|
AUTO_DETECT: "${AUTO_DETECT:-1}"
|
||||||
HOST: 0.0.0.0
|
HOST: "${HOST:-0.0.0.0}"
|
||||||
|
|
||||||
# 默认暴露全部 16 张卡;entrypoint 会根据模型选择实际 TP*PP。
|
# 默认暴露全部 16 张卡;entrypoint 会根据模型选择实际 TP*PP。
|
||||||
CUDA_VISIBLE_DEVICES: "${GPUS:-0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}"
|
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}"
|
MAX_NUM_SEQS: "${MAX_NUM_SEQS:-1}"
|
||||||
GPU_MEM_UTIL: "${GPU_MEM_UTIL:-0.90}"
|
GPU_MEM_UTIL: "${GPU_MEM_UTIL:-0.90}"
|
||||||
ENFORCE_EAGER: "${ENFORCE_EAGER:-1}"
|
ENFORCE_EAGER: "${ENFORCE_EAGER:-1}"
|
||||||
|
PYTHONUNBUFFERED: "1"
|
||||||
EXTRA_ARGS: "${EXTRA_ARGS:-}"
|
EXTRA_ARGS: "${EXTRA_ARGS:-}"
|
||||||
|
|
||||||
ulimits:
|
ulimits:
|
||||||
|
|||||||
6
run.sh
6
run.sh
@@ -77,6 +77,7 @@ eval "${DETECT_OUTPUT}"
|
|||||||
MODEL_KIND="${DETECTED_MODEL_KIND}"
|
MODEL_KIND="${DETECTED_MODEL_KIND}"
|
||||||
IMAGE="${IMAGE:-llama4-bi150:2026-10-26}"
|
IMAGE="${IMAGE:-llama4-bi150:2026-10-26}"
|
||||||
NAME="${NAME:-llama4-${MODEL_KIND}}"
|
NAME="${NAME:-llama4-${MODEL_KIND}}"
|
||||||
|
HOST="${HOST:-0.0.0.0}"
|
||||||
PORT="${PORT:-${DETECTED_PORT}}"
|
PORT="${PORT:-${DETECTED_PORT}}"
|
||||||
MODEL_MOUNT="${MODEL_MOUNT:-/models/llama4}"
|
MODEL_MOUNT="${MODEL_MOUNT:-/models/llama4}"
|
||||||
SERVED_NAME="${SERVED_NAME:-${DETECTED_SERVED_NAME}}"
|
SERVED_NAME="${SERVED_NAME:-${DETECTED_SERVED_NAME}}"
|
||||||
@@ -122,6 +123,9 @@ fi
|
|||||||
|
|
||||||
DOCKER_RUN=(
|
DOCKER_RUN=(
|
||||||
docker run -d --name "${NAME}"
|
docker run -d --name "${NAME}"
|
||||||
|
--entrypoint /usr/local/bin/llama4-entrypoint.sh
|
||||||
|
--workdir /opt/llama4
|
||||||
|
--expose "${PORT}"
|
||||||
--privileged
|
--privileged
|
||||||
--pid host
|
--pid host
|
||||||
--network host
|
--network host
|
||||||
@@ -134,6 +138,7 @@ DOCKER_RUN=(
|
|||||||
-e MODEL_PATH="${MODEL_MOUNT}"
|
-e MODEL_PATH="${MODEL_MOUNT}"
|
||||||
-e AUTO_DETECT="${AUTO_DETECT}"
|
-e AUTO_DETECT="${AUTO_DETECT}"
|
||||||
-e MODEL_KIND="${MODEL_KIND}"
|
-e MODEL_KIND="${MODEL_KIND}"
|
||||||
|
-e HOST="${HOST}"
|
||||||
-e SERVED_NAME="${SERVED_NAME}"
|
-e SERVED_NAME="${SERVED_NAME}"
|
||||||
-e PORT="${PORT}"
|
-e PORT="${PORT}"
|
||||||
-e TP="${TP}"
|
-e TP="${TP}"
|
||||||
@@ -142,6 +147,7 @@ DOCKER_RUN=(
|
|||||||
-e MAX_NUM_SEQS="${MAX_NUM_SEQS}"
|
-e MAX_NUM_SEQS="${MAX_NUM_SEQS}"
|
||||||
-e GPU_MEM_UTIL="${GPU_MEM_UTIL}"
|
-e GPU_MEM_UTIL="${GPU_MEM_UTIL}"
|
||||||
-e ENFORCE_EAGER="${ENFORCE_EAGER}"
|
-e ENFORCE_EAGER="${ENFORCE_EAGER}"
|
||||||
|
-e PYTHONUNBUFFERED=1
|
||||||
-e EXTRA_ARGS="${EXTRA_ARGS}"
|
-e EXTRA_ARGS="${EXTRA_ARGS}"
|
||||||
"${DOCKER_EXTRA[@]}"
|
"${DOCKER_EXTRA[@]}"
|
||||||
--restart unless-stopped
|
--restart unless-stopped
|
||||||
|
|||||||
Reference in New Issue
Block a user