From d0e260c322c9b2ed57a92808178a07f25e84bc8d Mon Sep 17 00:00:00 2001 From: xiejiahao Date: Mon, 26 Oct 2026 18:53:54 +0800 Subject: [PATCH] Keep image generic; move startup settings into run.sh/compose --- Dockerfile | 21 +++++---------------- README.md | 5 +++++ docker-compose.yml | 10 +++++++++- run.sh | 6 ++++++ 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2d593eb..5cf8ae0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 决定。 diff --git a/README.md b/README.md index 5a15af2..83fb311 100644 --- a/README.md +++ b/README.md @@ -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`: diff --git a/docker-compose.yml b/docker-compose.yml index 61c5eb0..c9ce44c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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: diff --git a/run.sh b/run.sh index a920623..a96a163 100755 --- a/run.sh +++ b/run.sh @@ -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