| #!/usr/bin/env bash |
| |
| |
|
|
| IMAGE_NAME=qwenllm/qwen-omni:2.5-cu121 |
| QWEN_CHECKPOINT_PATH=/path/to/Qwen2.5-Omni-7B |
| PORT=8901 |
| CONTAINER_NAME=qwen2.5-omni |
| FLASH_ATTN=0 |
|
|
| function usage() { |
| echo ' |
| Usage: bash docker/docker_web_demo.sh [-i IMAGE_NAME] -c [/path/to/Qwen-Instruct] [-n CONTAINER_NAME] [--port PORT] [--flash-attn2] |
| ' |
| } |
|
|
| while [[ "$1" != "" ]]; do |
| case $1 in |
| -i | --image-name ) |
| shift |
| IMAGE_NAME=$1 |
| ;; |
| -c | --checkpoint ) |
| shift |
| QWEN_CHECKPOINT_PATH=$1 |
| ;; |
| -n | --container-name ) |
| shift |
| CONTAINER_NAME=$1 |
| ;; |
| --port ) |
| shift |
| PORT=$1 |
| ;; |
| --flash-attn2 ) |
| FLASH_ATTN=1 |
| ;; |
| -h | --help ) |
| usage |
| exit 0 |
| ;; |
| * ) |
| echo "Unknown argument ${1}" |
| exit 1 |
| ;; |
| esac |
| shift |
| done |
|
|
| if [ ! -e ${QWEN_CHECKPOINT_PATH}/config.json ]; then |
| echo "Checkpoint config.json file not found in ${QWEN_CHECKPOINT_PATH}, exit." |
| exit 1 |
| fi |
|
|
| sudo docker pull ${IMAGE_NAME} || { |
| echo "Pulling image ${IMAGE_NAME} failed, exit." |
| exit 1 |
| } |
|
|
| WEB_DEMO_ARGS="--server-port 80 --server-name 0.0.0.0 -c /data/shared/Qwen/Qwen2.5-Omni-7B" |
| if [ ${FLASH_ATTN} -eq 1 ]; then |
| WEB_DEMO_ARGS+=" --flash-attn2" |
| fi |
|
|
| sudo docker run --gpus all -d --restart always --name ${CONTAINER_NAME} \ |
| -v /var/run/docker.sock:/var/run/docker.sock -p ${PORT}:80 \ |
| --mount type=bind,source=${QWEN_CHECKPOINT_PATH},target=/data/shared/Qwen/Qwen2.5-Omni-7B \ |
| -it ${IMAGE_NAME} \ |
| python web_demo.py ${WEB_DEMO_ARGS} && { |
| echo "Successfully started web demo. Open 'http://localhost:${PORT}' to try! |
| Run \`docker logs ${CONTAINER_NAME}\` to check demo status. |
| Run \`docker rm -f ${CONTAINER_NAME}\` to stop and remove the demo." |
| } |