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.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版本)

常用配置

  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

标签: AI

相关文章

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件