Download test_vision.sh from gatilin/llama.cpp-youtu-moe: direct link, hf CLI and curl.
- Browser
- Download file 1.95 kB
-
https://huggingface.co/gatilin/llama.cpp-youtu-moe/resolve/main/test_vision.sh
- Command line
-
hf download hf://gatilin/llama.cpp-youtu-moe/test_vision.sh
-
curl -L -o test_vision.sh https://huggingface.co/gatilin/llama.cpp-youtu-moe/resolve/main/test_vision.sh
1.95 kB
| # Youtu-LLM-A7B-Base 视觉(图文)冒烟测试 | |
| # | |
| # 用法: | |
| # bash test_vision.sh # 用内置报纸图 | |
| # bash test_vision.sh /path/to/img.jpg # 用指定图片 | |
| # | |
| # 前置:models/youtu-moe-a7b-Q4_K_M.gguf + models/youtu-vl-mmproj-f16.gguf | |
| set -euo pipefail | |
| ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | |
| CLI="$ROOT/llama.cpp/build/bin/llama-mtmd-cli" | |
| MODEL="$ROOT/models/youtu-moe-a7b-Q4_K_M.gguf" | |
| MMPROJ="$ROOT/models/youtu-vl-mmproj-f16.gguf" | |
| IMG="${1:-$ROOT/llama.cpp/tools/mtmd/test-1.jpeg}" | |
| for f in "$CLI" "$MODEL" "$MMPROJ" "$IMG"; do | |
| [ -e "$f" ] || { echo "缺少 $f" >&2; exit 1; } | |
| done | |
| # 提示词里的 <|vision_start|>/<|vision_end|> 是必须的:官方 processor 用它们包裹 | |
| # 图像占位(image_token_id=128017)。<__media__> 会被 mtmd 替换成视觉 embedding 块, | |
| # 因此不要在提示词里再写 <|image_pad|>。chat_template.jinja 本身不含图像分支, | |
| # 所以这里不走 --jinja,直接给裸提示词。 | |
| PROMPT="<|vision_start|><__media__><|vision_end|>描述这张图片的内容。" | |
| echo "图片: $IMG" | |
| # 默认关闭逐批次模态诊断(会插在输出流里);需要时用 | |
| # YOUTU_DEBUG_MODALITY=1 bash test_vision.sh | |
| # 打开后应看到图像批次 vision 数 == 图像 token 数、其余批次 vision=0。 | |
| # | |
| # 输出过滤分两步: | |
| # 1. 去掉带 4 段时间戳的日志行(格式 0.05.132.418 I ...) | |
| # 2. strip_think.py --from-first-think:跳过 llama-mtmd-cli 夹带的 3 行 | |
| # chat template 示例,从正文处开始,并剥掉开头的 </think> 残留 | |
| # (视觉提示词里没有 <|Assistant|>,但模型仍会先吐 1~2 个) | |
| YOUTU_DEBUG_MODALITY="${YOUTU_DEBUG_MODALITY:-0}" "$CLI" \ | |
| -m "$MODEL" --mmproj "$MMPROJ" --image "$IMG" \ | |
| -p "$PROMPT" -n 200 -c 4096 --temp 0.2 -ngl 99 2>&1 \ | |
| | grep -vE "^[0-9]+(\.[0-9]+)+ [A-Z] " \ | |
| | python3 "$ROOT/strip_think.py" --from-first-think | |