专注于高性能网络应用开发,核心技术包括PHP、Java、GO、NodeJS等后端语言,VUE、UNI、APP等前端开发,服务器运维、数据库、实时通信、AI等领域拥有丰富经验

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

说明:

  1. [Unit]:描述服务的基本信息,如服务名称和依赖。

    • Description: Ollama 服务的描述。
    • After: 依赖网络服务启动后再启动 Ollama。
  2. [Service]:定义服务如何启动和运行。

    • ExecStart: 启动命令,此处使用 /usr/local/bin/ollama serve 启动 Ollama。
    • Environment: 设置环境变量 OLLAMA_NUM_PARALLELOLLAMA_MAX_LOADED_MODELS,分别控制并发请求处理数量和同时加载的模型数量。
    • WorkingDirectory: 指定 Ollama 服务的工作目录。
    • Restart=always: 如果服务崩溃或意外退出,自动重启服务。
    • RestartSec=10: 在重启前等待 10 秒。
  3. [Install]:定义服务的安装行为。

    • WantedBy=multi-user.target: 指定服务在多用户模式下启动。

安装和启动步骤:

  1. 将该文件保存为 /etc/systemd/system/ollama.service

    sudo nano /etc/systemd/system/ollama.service
  2. 保存并退出后,重新加载 systemd 配置:

    sudo systemctl daemon-reload
  3. 启动并使 Ollama 服务开机自启:

    sudo systemctl start ollama
    sudo systemctl enable ollama
  4. 检查服务状态:

    sudo systemctl status ollama

通过这个配置,Ollama 服务可以同时处理多个请求并加载多个模型。


Ollama可配置环境变量 (有些老版本的配置我已经移除,这儿显示的是当前0.7x有的参数. 具体可参考)

OLLAMA_DEBUG: 显示调试信息(默认false,示例值:1)
OLLAMA_FLASH_ATTENTION: 启用 Flash Attention(默认false,示例值:1)
OLLAMA_KV_CACHE_TYPE: K/V 缓存类型(默认f16,可选:f32/q8等)
OLLAMA_GPU_OVERHEAD: 单GPU预留VRAM[字节](默认0,示例:2147483648=2GB)
OLLAMA_HOST: 服务地址(默认127.0.0.1:11434,示例:0.0.0.0:443)
OLLAMA_KEEP_ALIVE: 模型驻留时长(默认"5m",示例:"24h"/"-1"表示永久)
OLLAMA_LLM_LIBRARY: 强制指定LLM库(示例:custom_cuda_lib,用于绕过自动检测)
OLLAMA_LOAD_TIMEOUT: 模型加载超时时间(默认"5m",示例:"10m")
OLLAMA_MAX_LOADED_MODELS: 单GPU最大加载模型数(默认自动,示例:3)
OLLAMA_MAX_QUEUE: 最大请求队列长度(默认512,示例:1024)
OLLAMA_MODELS: 模型存储路径(默认~/.ollama/models,示例:/mnt/data/models)
OLLAMA_NOHISTORY: 禁用CLI历史记录(默认false,示例:true)
OLLAMA_NOPRUNE: 禁用启动时修剪模型blob(默认false,示例:true)
OLLAMA_NUM_PARALLEL: 最大并行请求数(默认自动,示例:4)
OLLAMA_ORIGINS: 允许的跨域源(逗号分隔,示例:http://*.example.com,https://app.test )
OLLAMA_SCHED_SPREAD: 是否在所有GPU上调度模型(默认false,示例:true)
OLLAMA_MULTIUSER_CACHE: 多用户缓存优化(默认false,示例:1)
OLLAMA_CONTEXT_LENGTH: 默认上下文长度(默认4096,示例:8192)
OLLAMA_NEW_ENGINE: 启用新引擎(默认false,示例:1)

# 代理设置
HTTP_PROXY: HTTP代理地址(示例:http://proxy.example.com:8080)
HTTPS_PROXY: HTTPS代理地址(示例:https://proxy.example.com:8080 )
NO_PROXY: 不使用代理的域名或IP列表(逗号分隔,示例:localhost,127.0.0.1)

# GPU相关(非macOS平台)
CUDA_VISIBLE_DEVICES: 可见的NVIDIA设备ID(示例:0,1)
HIP_VISIBLE_DEVICES: 可见的AMD设备ID(按数字编号)(示例:0,1)
ROCR_VISIBLE_DEVICES: 可见的AMD设备ID(支持UUID或数字编号)(示例:0,1)
GPU_DEVICE_ORDINAL: 设置可见的AMD设备(按数字编号)(示例:0)
HSA_OVERRIDE_GFX_VERSION: 强制覆盖AMD GPU的GFX版本(示例:9.0.0)
OLLAMA_INTEL_GPU: 启用实验性Intel GPU检测(默认false,示例:1)

常用配置

  1. 显卡资源使用不均横
    设置环境变量OLLAMA_SCHED_SPREAD1即可
  2. 加速计算
    FlashAttention 是一种优化的注意力机制,用于加速深度学习模型中常见的自注意力计算,尤其是在Transformer架构中。它通过改进内存访问模式和计算策略,显著提高了计算效率和内存使用率。
    我们可以通过设置环境变量OLLAMA_FLASH_ATTENTION1,开启改选项

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

相关文章