首页
Search
1
v2ray异常错误之二
3,310 阅读
2
linux时区设置
2,698 阅读
3
DB2常用操作
2,173 阅读
4
websphere修改jvm内存xmx和xms
1,929 阅读
5
nfs客户端文件属主为nobody的现象
1,552 阅读
技术
生活
运动
游戏
电影
登录
Search
标签搜索
docker
linux
troubleshooting
nginx
secure
truenas
mysql
windows
python
esxi
docker swarm
oracle
zabbix
tomcat
blog
dsm
群晖
rpa
freenas
db
yuc
累计撰写
291
篇文章
累计收到
0
条评论
首页
栏目
技术
生活
运动
游戏
电影
页面
搜索到
1
篇与
的结果
2025-07-28
llama-server推理medgemma3 gguf模型
背景 有需求要用到 google 的 medgemma-27b-text-it 模型,但当前GPU服务器只有两卡 4090D 24G,显存很显然不够用,所以计划使用量化版模型 在 huggingface 上找到了gguf量化模型,由 unsloth 提供,其仓库地址为: unsloth/medgemma-27b-text-it-GGUF 根据模型大小分别下载了 medgemma-27b-text-it-Q4_1.gguf、medgemma-27b-text-it-Q4_K_M.gguf、medgemma-27b-text-it-Q8_0.gguf 几个版本到本地 尝试vllm启动 了解到 vllm 也是支持启动 gguf 模型的,那么首先尝试用该后端启动: vllm serve /data/Modules/medgemma-27b-text-it-GGUF/medgemma-27b-text-it-Q4_1.gguf -tp 2 --max-model-len 40960 注意使用本地模型的时候路径需要使用绝对路径,否则会认为需要通过 hf 来拉取模型 但以上命令启动失败,提示不支持 gemma3_text 模型 于是我指定了模型配置文件和tokenizer,并且覆盖了模型的architectures,使用以下命令启动 vllm serve /data/Modules/medgemma-27b-text-it-GGUF/medgemma-27b-text-it-Q4_1.gguf --trust-remote-code --hf-config-path unsloth/gemma-3-27b-it -tp 2 --max-model-len 4096 --tokenizer unsloth/gemma-3-27b-it --hf-overrides '{"architectures": ["Gemma3ForCausalLM"]}' 以上指定了 hf 的仓库,需要注册 hf 账号,并且在后台生成token,然后在本地使用 huggingface-cli login 即可拉取仓库文件了,全程需要代理 不过结果还是未启动成功,仍然是不支持的模型,接着我尝试升级了vllm版本、降低和升高了 transformers 的版本,也依然没有效果 至此尝试使用vllm来启动 medgemma3-27b-text-it gguf格式的模型失败 尝试llama.cpp启动 看了 unsloth/medgemma-27b-text-it-GGUF 页面,还是原版 google 页面的内容,并没有建议使用哪个后端启动gguf模型,既然 vllm 也无法有效使用,那还是考虑使用 llama.cpp 了 编译安装 首先拉取最新的仓库代码,地址: https://github.com/ggml-org/llama.cpp 使用如下命令编译二进制文件: cmake -B build -DGGML_CUDA=ON cmake --build build --config Release 需要使用参数 -DGGML_CUDA=ON 否则编译的版本只支持 cpu llama-server启动 进入到build/bin目录下,有 llama-cli 和 llama-server,启动 cli 是命令行交互使用,而 server 可以作为 api 服务,使用以下命令启动模型: CUDA_VISIBLE_DEVICES="0,1" ./llama-server -m /data/Modules/medgemma-27b-text-it-GGUF/medgemma-27b-text-it-Q4_1.gguf --port 8080 --host 0.0.0.0 -ngl 99 -dev cuda0,cuda1 -sm row -fa --jinja -c 50000 --no-context-shift 重点参数解析: -m 指定本地模型的路径 -ngl 允许将一些层卸载到 GPU 进行计算,以上值表示99层 -sm 表示使用row来切分所有层卸载到gpu,也可以使用其他方式如 layer -fa 开启 Flash Attention --jinja 表示使用嵌入在 GGUF 中的聊天模板(推荐) -c 表示允许的最大上下文长度 -n 表示允许生成的最大长度,默认-1表示无限制直到结束,建议指定 --no-context-shift 建议指定,具体作用查看参数说明 使用以上命令成功启动服务,并且使用通用api请求成功响应,如下: { "model": "/data/Modules/medgemma-27b-text-it-GGUF/medgemma-27b-text-it-Q8_0.gguf", "messages": [ { "role": "system", "content": "你是一个专业知识丰富的医疗助手" }, { "role": "user", "content": "埃博拉病毒和狂犬病哪个死亡率更高" } ], "temperature": 0.7, "top_p": 0.8, "chat_template_kwargs": { "enable_thinking": false }, "repetition_penalty": 1.05 } 疑难问题 但实际循环一批请求发现执行了一会儿之后总是会卡住,无法继续,等待了一个小时、甚至两个小时仍然没有结束 其他表现形式为:新增请求可以,但也无法结束,使用GET获取模型列表倒是可以正常返回 于是重新启动,开启了 -v 调试日志,发现运行一段时间后推理的内容就不太对了,如下: next token: 38 '' 也许一两个空字符是正常的,但以上 38 和 '' 几乎是刷屏的,也就是说后续一直都没有正常推理出内容了 更换量化模型 怀疑是 Q4 模型生成的质量可能有问题,于是更换为了 Q8 但持续测试后现象依旧 继续排查 因为每次出现问题的进度都差不多,所以在代码中请求之前打印了问题和列表,发现总是到固定问题的时候出现这个现象 重启服务后测试单独请求,结果必然复现,会持续输出大量的空字符,过了很久输出完毕后,下一个问题也变成输出空字符 由此可见,输出也许是有上限的,当然我也没有使用 -n 控制在一个合理的范围,更重要的问题是重复输出和影响后续问题的推理 柳暗花明 经过查找资料,发现近两天就有同样的问题出现,也是关于重复输出的问题,地址如下: https://github.com/ggml-org/llama.cpp/issues/14888 其中描述的现象,以及其他人回复的内容,跟我们的问题都非常符合,并且lcarrere进行了相关的分析,其中主要为: Investigating, we notice very abnormal repetitions when the KV cache size exceeds approximately 1024 tokens. This is occurring only with flash attention enabled, with swa on/off. This issue occurs regardless of whether vision tensors are used. 但此时还没有合适的解决办法,只能先尝试关闭 flash attention,看能否解决了 在移除fa的参数后启动,再次提交推理,此时顺利通过之前卡住的部分 CUDA_VISIBLE_DEVICES="0,1" ./llama-server -m /data/Modules/medgemma-27b-text-it-GGUF/medgemma-27b-text-it-Q4_1.gguf --port 8080 --host 0.0.0.0 -ngl 99 -dev cuda0,cuda1 -sm row --jinja -c 50000 20250730 根据帖子的最新回复内容,已经提交了针对这个问题的修改 但编译了 6019 版本,使用 -fa 参数的时候仍然无法正常响应
2025年07月28日
2 阅读
0 评论
0 点赞