Switch to bridge networking with fixed container port 80 and served name llm
- run.sh: bridge + -p ${HOST_PORT:-24396}:80, health check uses host port
- entrypoint.sh: PORT defaults to 80, SERVED_NAME defaults to llm
detected port/served name become log hints only
- verify.sh: read host port from port bindings, expect model name llm
- docker-compose.yml: ports mapping instead of network_mode host
- README: update tables, commands and rationale
This commit is contained in:
31
run.sh
31
run.sh
@@ -16,7 +16,8 @@
|
||||
# GPUS=8,9,10,11,12,13,14,15 ./run.sh /path/to/scout
|
||||
# EXTRA_DOCKER_ARGS="-v /mnt/disk1:/data:ro" ./run.sh /path/to/model
|
||||
# EXTRA_ARGS="--max-model-len 8192" ./run.sh /path/to/model
|
||||
# TP=8 PP=1 PORT=8095 SERVED_NAME=my-llama4 ./run.sh /path/to/model
|
||||
# HOST_PORT=24397 ./run.sh /path/to/model # 换宿主机端口(默认 24396)
|
||||
# TP=8 PP=1 SERVED_NAME=llm ./run.sh /path/to/model
|
||||
# BUILD=0 ./run.sh /path/to/model # 使用已有镜像
|
||||
# DRY_RUN=1 ./run.sh /path/to/model # 只打印 docker run 命令
|
||||
#
|
||||
@@ -35,8 +36,9 @@ usage() {
|
||||
模型类型由 MODEL_DIR/config.json 自动判断,不需要 scout/maverick 参数。
|
||||
|
||||
环境变量覆盖:
|
||||
IMAGE NAME MODEL_HOST_DIR MODEL_MOUNT PORT SERVED_NAME
|
||||
TP PP GPUS MAX_MODEL_LEN MAX_NUM_SEQS GPU_MEM_UTIL
|
||||
IMAGE NAME MODEL_HOST_DIR MODEL_MOUNT SERVED_NAME
|
||||
TP PP GPUS HOST_PORT(宿主机端口,默认 24396;容器内固定 80)
|
||||
MAX_MODEL_LEN MAX_NUM_SEQS GPU_MEM_UTIL
|
||||
ENFORCE_EAGER AUTO_DETECT EXTRA_ARGS EXTRA_DOCKER_ARGS
|
||||
BUILD=0/1 DRY_RUN=0/1
|
||||
EOF
|
||||
@@ -78,9 +80,12 @@ 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}}"
|
||||
# 容器内端口固定 80;宿主机端口是 HOST_PORT,默认 24396(串行部署复用同一端口)。
|
||||
# PORT 保留为兼容别名,若显式给 PORT 则视作 HOST_PORT。
|
||||
CONTAINER_PORT=80
|
||||
HOST_PORT="${HOST_PORT:-${PORT:-24396}}"
|
||||
MODEL_MOUNT="${MODEL_MOUNT:-/models/llama4}"
|
||||
SERVED_NAME="${SERVED_NAME:-${DETECTED_SERVED_NAME}}"
|
||||
SERVED_NAME="${SERVED_NAME:-llm}"
|
||||
TP="${TP:-${DETECTED_TP}}"
|
||||
PP="${PP:-${DETECTED_PP}}"
|
||||
MAX_MODEL_LEN="${MAX_MODEL_LEN:-4096}"
|
||||
@@ -125,11 +130,11 @@ DOCKER_RUN=(
|
||||
docker run -d --name "${NAME}"
|
||||
--entrypoint /usr/local/bin/llama4-entrypoint.sh
|
||||
--workdir /opt/llama4
|
||||
--expose "${PORT}"
|
||||
--expose "${CONTAINER_PORT}"
|
||||
--privileged
|
||||
--pid host
|
||||
--network host
|
||||
--ipc host
|
||||
-p "${HOST_PORT}:${CONTAINER_PORT}"
|
||||
-v /dev:/dev
|
||||
-v "${MODEL_HOST_DIR}:${MODEL_MOUNT}:ro"
|
||||
--ulimit memlock=-1
|
||||
@@ -140,7 +145,7 @@ DOCKER_RUN=(
|
||||
-e MODEL_KIND="${MODEL_KIND}"
|
||||
-e HOST="${HOST}"
|
||||
-e SERVED_NAME="${SERVED_NAME}"
|
||||
-e PORT="${PORT}"
|
||||
-e PORT="${CONTAINER_PORT}"
|
||||
-e TP="${TP}"
|
||||
-e PP="${PP}"
|
||||
-e MAX_MODEL_LEN="${MAX_MODEL_LEN}"
|
||||
@@ -156,7 +161,9 @@ DOCKER_RUN=(
|
||||
|
||||
echo "==> detected ${MODEL_KIND}: ${DETECTED_DESCRIPTION}"
|
||||
echo " model : ${MODEL_HOST_DIR}"
|
||||
echo " TP/PP : ${TP}/${PP} (${GPU_COUNT} GPUs), port=${PORT}, name=${SERVED_NAME}"
|
||||
echo " TP/PP : ${TP}/${PP} (${GPU_COUNT} GPUs)"
|
||||
echo " port : 127.0.0.1:${HOST_PORT} -> container:${CONTAINER_PORT}"
|
||||
echo " name : ${SERVED_NAME}"
|
||||
echo " GPUs : ${GPUS}"
|
||||
|
||||
if [[ "${DRY_RUN}" == "1" ]]; then
|
||||
@@ -178,10 +185,10 @@ docker rm -f "${NAME}" 2>/dev/null || true
|
||||
echo "==> run ${MODEL_KIND}"
|
||||
"${DOCKER_RUN[@]}"
|
||||
|
||||
echo "==> wait for http://127.0.0.1:${PORT}/health"
|
||||
echo "==> wait for http://127.0.0.1:${HOST_PORT}/health"
|
||||
for _ in $(seq 1 120); do
|
||||
if curl -sf "http://127.0.0.1:${PORT}/health" >/dev/null 2>&1; then
|
||||
echo "ready: http://127.0.0.1:${PORT}/v1/models"
|
||||
if curl -sf "http://127.0.0.1:${HOST_PORT}/health" >/dev/null 2>&1; then
|
||||
echo "ready: http://127.0.0.1:${HOST_PORT}/v1/models"
|
||||
exit 0
|
||||
fi
|
||||
sleep 5
|
||||
|
||||
Reference in New Issue
Block a user