Ollama开启多模型、高并发配置等配置 可用性更强
ollama默认是单模型运行,并且同时发起两个提问,他会一个个处理,所以在内存允许的情况下,有时候我们会开启多模型和并发处理
下面是我linux服务下完整的 systemd
服务文件示例,它用于配置 Ollama 服务,支持多并发处理请求和多模型加载:
Ollama systemd
服务文件示例
[Unit]
Description=Ollama AI Model Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/ollama serve
# 配置并行处理请求的数量
Environment="OLLAMA_NUM_PARALLEL=4"
# 配置同时加载的模型数量
Environment="OLLAMA_MAX_LOADED_MODELS=4"
# 设置工作目录
WorkingDirectory=/var/lib/ollama
# 如果进程崩溃自动重启
Restart=always
# 重启等待时间
RestartSec=10
# 配置所需的用户和权限
User=ollama
Group=ollama
[Install]
WantedBy=multi-user.target
说明:
[Unit]
:描述服务的基本信息,如服务名称和依赖。Description
: Ollama 服务的描述。After
: 依赖网络服务启动后再启动 Ollama。
[Service]
:定义服务如何启动和运行。ExecStart
: 启动命令,此处使用/usr/local/bin/ollama serve
启动 Ollama。Environment
: 设置环境变量OLLAMA_NUM_PARALLEL
和OLLAMA_MAX_LOADED_MODELS
,分别控制并发请求处理数量和同时加载的模型数量。WorkingDirectory
: 指定 Ollama 服务的工作目录。Restart=always
: 如果服务崩溃或意外退出,自动重启服务。RestartSec=10
: 在重启前等待 10 秒。
[Install]
:定义服务的安装行为。WantedBy=multi-user.target
: 指定服务在多用户模式下启动。
安装和启动步骤:
将该文件保存为
/etc/systemd/system/ollama.service
。sudo nano /etc/systemd/system/ollama.service
保存并退出后,重新加载
systemd
配置:sudo systemctl daemon-reload
启动并使 Ollama 服务开机自启:
sudo systemctl start ollama sudo systemctl enable ollama
检查服务状态:
sudo systemctl status ollama
通过这个配置,Ollama 服务可以同时处理多个请求并加载多个模型。
Ollama可配置环境变量 (有些老版本的配置我已经移除,这儿显示的是当前0.5x有的参数. 具体可参考)
OLLAMA_DEBUG: 显示调试信息(默认false,示例值:1)
OLLAMA_HOST: 服务地址[协议://IP:端口](默认http://127.0.0.1:11434,示例:https://0.0.0.0:443)
OLLAMA_KEEP_ALIVE: 模型驻留时长(默认5m,示例:24h/-1表示永久)
OLLAMA_MODELS: 模型存储路径(默认~/.ollama/models,示例:/mnt/data/models)
OLLAMA_MAX_LOADED_MODELS: 单GPU最大加载模型数(示例:3)
OLLAMA_MAX_QUEUE: 最大请求队列长度(默认512,示例:1024)
OLLAMA_MAX_VRAM: 最大VRAM使用量[字节](默认0无限制,示例:16000000000=16GB)
OLLAMA_NUM_PARALLEL: 最大并行请求数(示例:4)
OLLAMA_NOPRUNE: 禁用启动修剪(默认false,示例:true)
OLLAMA_ORIGINS: 允许的跨域源(逗号分隔,示例:http://*.example.com,https://app.test)
OLLAMA_SCHED_SPREAD: 跨GPU调度(默认false,示例:true)
OLLAMA_FLASH_ATTENTION: 启用Flash Attention(默认false,示例:1)
OLLAMA_LLM_LIBRARY: 指定LLM库(示例:custom_cuda_lib)
OLLAMA_KV_CACHE_TYPE: K/V缓存类型(默认f16,示例:f32)
OLLAMA_GPU_OVERHEAD: 单GPU预留VRAM[字节](默认0,示例:2147483648=2GB)
OLLAMA_NOHISTORY: 禁用CLI历史(默认false,示例:true)
OLLAMA_MULTIUSER_CACHE: 多用户缓存优化(默认false,示例:1)
OLLAMA_NEW_ENGINE: 启用新引擎(默认false,示例:true)
OLLAMA_INTEL_GPU: 启用Intel GPU检测(默认false,示例:1)
OLLAMA_LOAD_TIMEOUT: 模型加载超时(默认5m,示例:10m)
OLLAMA_NUM_THREADS: CPU核数
OLLAMA_NUM_KV_THREADS: 总核数/4 专门处理key-value缓存的线程
OLLAMA_MMAN_LOCK_PAGES: 1 锁定内存页防止交换
OLLAMA_CONTEXT_LENGTH:设置默认上下文长度 8192 (v0.5.13版本)
常用配置
- 显卡资源使用不均横
设置环境变量OLLAMA_SCHED_SPREAD
为1
即可 - 加速计算
FlashAttention 是一种优化的注意力机制,用于加速深度学习模型中常见的自注意力计算,尤其是在Transformer架构中。它通过改进内存访问模式和计算策略,显著提高了计算效率和内存使用率。
我们可以通过设置环境变量OLLAMA_FLASH_ATTENTION
为1
,开启改选项
3.增加上下文窗口
假设你从Ollama上拉取了大模型,其默认的窗口大小只有2048。我们可以通过如下方法,提高上下文窗口ollama show --modelfile qwen2.5-coder > Modelfile
我们看一下生成的Modelfile
# Modelfile generated by "ollama show"
# To build a new Modelfile based on this, replace FROM with:
# FROM qwen2.5-coder:latest
FROM ~/.ollama/models/blobs/sha256-ced7796abcbb47ef96412198ebd31ac1eca21e8bbc831d72a31df69e4a30aad5
TEMPLATE """{{- if .Suffix }}<|fim_prefix|>{{ .Prompt }}<|fim_suffix|>{{ .Suffix }}<|fim_middle|>
{{- else if .Messages }}
{{- if or .System .Tools }}<|im_start|>system
{{- if .System }}
{{ .System }}
{{- end }}
{{- if .Tools }}
# Tools
You may call one or more functions to assist with the user query.
You are provided with function signatures within <tools></tools> XML tags:
<tools>
{{- range .Tools }}
{"type": "function", "function": {{ .Function }}}
{{- end }}
</tools>
For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>
{{- end }}<|im_end|>
{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 -}}
{{- if eq .Role "user" }}<|im_start|>user
{{ .Content }}<|im_end|>
{{ else if eq .Role "assistant" }}<|im_start|>assistant
{{ if .Content }}{{ .Content }}
{{- else if .ToolCalls }}<tool_call>
{{ range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}}
{{ end }}</tool_call>
{{- end }}{{ if not $last }}<|im_end|>
{{ end }}
{{- else if eq .Role "tool" }}<|im_start|>user
<tool_response>
{{ .Content }}
</tool_response><|im_end|>
{{ end }}
{{- if and (ne .Role "assistant") $last }}<|im_start|>assistant
{{ end }}
{{- end }}
{{- else }}
{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ end }}{{ .Response }}{{ if .Response }}<|im_end|>{{ end }}"""
SYSTEM You are a helpful assistant.
PARAMETER stop <|endoftext|>
然后在PARAMETER处增加如下配置,32768就是上下文窗口大小,设置成你想要的即可
注意增加上下文窗口可能增加显存的使用,谨慎增加PARAMETER num_ctx 32768
然后创建新模型即可ollama create qwen2.5-coder:7b-32k -f Modelfile
接下来,你就可以使用运行具有更高上下文的模型了 ollama run qwen2.5-coder:7b-32k
版权声明:本文为原创文章,版权归 全栈开发技术博客 所有。
本文链接:https://www.lvtao.net/tool/ollama-parallel-max-models.html
转载时须注明出处及本声明