Ollama介绍与使用指南

Ollama 是一个强大的本地推理大模型平台,旨在简化模型的本地部署、管理和推理工作流。它允许用户在本地机器上拉取、管理、运行大模型,并提供多种访问方式,包括本地 CLI、HTTP 接口以及通过 OpenAI 客户端的集成。这篇文章将详细介绍 Ollama 的功能,如何使用 Ollama 拉取模型、运行模型,并通过多种方式访问推理服务。

一、Ollama的主要功能

Ollama 的核心功能包括:

  1. 本地模型管理:Ollama 支持从官方模型库或自定义模型库拉取预训练模型,并在本地保存和加载。它支持各种流行的模型格式(如 ONNX、PyTorch、TensorFlow)。
  2. 高效推理:通过 GPU/CPU 的加速,Ollama 提供高效的模型推理,适合本地化应用或需要控制数据隐私的场景。
  3. 多种接口访问:Ollama 支持命令行(CLI)、HTTP 接口访问推理服务,并通过 OpenAI 客户端实现更广泛的集成。
  4. 环境变量配置:通过灵活的环境变量,用户可以自定义推理设备(GPU/CPU)、缓存路径、并发数、日志级别等。

接下来我们将详细介绍 Ollama 的安装、常用命令、如何拉取和运行模型、以及不同方式访问 Ollama 推理服务。

二、Ollama的安装与基本配置

1. 安装 Ollama

1.1 获取桌面软件

安装桌面软件可以去官网下载:ollama

1.2 命令行安装

要安装 Ollama,首先需要在系统中安装 Ollama CLI 工具。可以通过以下命令安装:

# macOS 用户
brew install ollama

# Linux 用户(以 Ubuntu 为例)
curl -s https://ollama.com/install | bash

# Windows 用户可以通过 WSL2 安装,参考官网文档获取更多细节

1.3 docker镜像

去下载官方镜像Ollama Docker image。一般高端计算显卡都放在远程,推荐使用docker容器化安装。本文的后续操作也是基于容器化安装。
启动命令按照docker正常启动就行,可以参考我的启动命令,自行修改

docker run -d --gpus=all \
 -e OLLAMA_KEEP_ALIVE=-1 \
 -e OLLAMA_NUM_PARALLEL=4  \
 -e OLLAMA_FLASH_ATTENTION=1  \
 -v /data3/alex/ollama:/root/.ollama  \
 -p 23153:11434 --name ollama-vincent docker.io/ollama/ollama:0.3.11

2. 配置 Ollama

Ollama 允许通过环境变量进行配置。常见的环境变量包括:

  • OLLAMA_MODEL_PATH:指定模型存储路径
  • OLLAMA_DEVICE:选择推理使用的设备(如 cpugpu
  • OLLAMA_LOG_LEVEL:设置日志级别(如 debug, info

例如:

export OLLAMA_MODEL_PATH=~/ollama_models
export OLLAMA_DEVICE=gpu
export OLLAMA_LOG_LEVEL=debug

更多环境变量可以参考命令的输出:

root@6b5c84c53d0e:/# ollama serve -h
Start ollama

Usage:
  ollama serve [flags]

Aliases:
  serve, start

Flags:
  -h, --help   help for serve

Environment Variables:
      OLLAMA_DEBUG               Show additional debug information (e.g. OLLAMA_DEBUG=1)
      OLLAMA_HOST                IP Address for the ollama server (default 127.0.0.1:11434)
      OLLAMA_KEEP_ALIVE          The duration that models stay loaded in memory (default "5m")
      OLLAMA_MAX_LOADED_MODELS   Maximum number of loaded models per GPU
      OLLAMA_MAX_QUEUE           Maximum number of queued requests
      OLLAMA_MODELS              The path to the models directory
      OLLAMA_NUM_PARALLEL        Maximum number of parallel requests
      OLLAMA_NOPRUNE             Do not prune model blobs on startup
      OLLAMA_ORIGINS             A comma separated list of allowed origins
      OLLAMA_SCHED_SPREAD        Always schedule model across all GPUs
      OLLAMA_TMPDIR              Location for temporary files
      OLLAMA_FLASH_ATTENTION     Enabled flash attention
      OLLAMA_LLM_LIBRARY         Set LLM library to bypass autodetection
      OLLAMA_GPU_OVERHEAD        Reserve a portion of VRAM per GPU (bytes)
      OLLAMA_LOAD_TIMEOUT        How long to allow model loads to stall before giving up (default "5m")

三、常用的 Ollama 命令

Ollama 提供了多种命令,方便用户进行模型管理和推理。下面介绍一些常用的命令。

1. 查看帮助信息

要查看 Ollama 支持的所有命令及其用法,可以使用以下命令:

ollama help

这将列出所有支持的命令和相关说明,例如 runlistpull 等。

2. 查看可用模型

要查看 Ollama 官方支持的模型,可以运行以下命令:

ollama list

这将返回一个可用模型的列表,包括模型的名称、版本等信息。

3. 拉取模型

要拉取某个模型到本地进行推理,使用 pull 命令。例如,拉取一个名为 llama2 的模型:

ollama pull llama2

该命令会将模型下载并存储在本地的 OLLAMA_MODEL_PATH 路径中。如果没有指定该路径,Ollama 会使用默认存储路径。

4. 删除模型

如果不再需要某个模型,可以使用 remove 命令将其从本地删除:

ollama remove llama2

5. 检查模型状态

使用 ps 命令可以查看当前模型的状态,包括是否已加载到内存中,设备信息等:

root@6b5c84c53d0e:/# ollama ps
NAME                         ID              SIZE      PROCESSOR    UNTIL
qwen2:7b-instruct            e0d4e1163c58    5.7 GB    100% GPU     Forever
qwen2.5:1.5b                 65ec06548149    2.0 GB    100% GPU     Forever
qwen2.5:0.5b                 a8b0c5157701    1.3 GB    100% GPU     Forever
llama3.2:3b-instruct-fp16    195a8c01d91e    8.5 GB    100% GPU     Forever
glm4:9b                      5b699761eca5    6.6 GB    100% GPU     Forever

四、运行模型

模型拉取完成后,Ollama 提供了简便的方式来运行推理任务。以下介绍如何通过命令行、HTTP 接口和 OpenAI 客户端访问推理服务。

1. 通过命令行运行模型

要在命令行中运行模型进行推理,可以使用 run 命令。例如,运行 llama2 模型并输入一句话让其进行推理:

ollama run llama2 "Hello, how are you today?"

输出将显示模型生成的结果。run 命令支持传递不同的参数,例如设置生成的最大长度、温度等参数:

ollama run llama2 "Hello!" --max_length 50 --temperature 0.8

最好是直接进入本地交互环境

root@6b5c84c53d0e:/# ollama run qwen2:7b-instruct
>>> 你能做什么,你是什么模型
我是一个大型语言模型,被训练来生成与各种主题相关的文本内容。我可以帮助解答问题、提供信息、进行对话、撰写文章、故事或邮件等。尽管我的
能力在不断扩展和优化中,但我并不能执行需要实际物体操作或者具有特定领域专业知识的任务。

我是通义千问大模型的增强版本,名为通义万相,主要用于处理语言生成任务,并以图像形式输出结果。通过将自然语言指令转化为图像,我可以帮助
用户获得创意设计、插画、图像修改以及其他基于视觉的需求。我的核心功能是理解文本输入并将其转换为与之相关的高质量图像输出。

请注意,在某些情况下我可能会犯错误或者给出不准确的回答,请您根据实际情况进行判断和验证信息的正确性。我会不断地学习和进步,希望在帮助
用户解决问题和提供有价值的信息方面发挥积极作用。
>>> 

2. 通过 HTTP 访问

Ollama 还提供了 HTTP 接口,允许用户通过 REST API 调用模型进行推理。

启动 HTTP 服务

首先,需要启动 Ollama 的 HTTP 服务,可以通过以下命令启动服务:

ollama serve

这将启动一个本地 HTTP 服务器,默认情况下监听 localhost:11434。你可以通过浏览器或 Postman 访问 API 进行测试。
如果使用上面的容器化安装,启动容器以后,服务已经启动了,使用ollama ps 命令就能看到已经running的模型服务。

发起 HTTP 请求

使用 curl 命令发起 HTTP 请求,调用 llama2 模型进行推理:

curl -X POST http://localhost:11434/v1/models/llama2/completions \
-H "Content-Type: application/json" \
-d '{
  "prompt": "Tell me a joke",
  "max_length": 50,
  "temperature": 0.7
}'

该请求将返回模型生成的文本。响应格式为 JSON,例如:

{
  "id": "cmpl-5sWYxF",
  "object": "text_completion",
  "created": 1690243381,
  "model": "llama2",
  "choices": [
    {
      "text": "Why don't scientists trust atoms? Because they make up everything!"
    }
  ]
}

也支持chat调用接口

curl --location 'http://localhost:11434/v1/chat/completions' \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen2:7b-instruct",
    "stream": false,
    "messages": [
        {
            "role": "user",
            "content": "你是谁,可以做什么?"
        }
    ],
    "temperature": 0
}'
{
    "id": "chatcmpl-568",
    "object": "chat.completion",
    "created": 1727494268,
    "model": "qwen2:7b-instruct",
    "system_fingerprint": "fp_ollama",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "我是阿里云开发的一款超大规模语言模型,我叫通义千问。我可以生成各种文本内容、回答问题、提供信息咨询等任务。你可以问我各种问题或者需要创作一些文本,我会尽力帮助你。如果你有任何需求,请随时告诉我!"
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 14,
        "completion_tokens": 55,
        "total_tokens": 69
    }
}

3. 通过 OpenAI 客户端访问

Ollama 支持通过 OpenAI 的 API 客户端访问本地的模型推理服务,这样你可以使用类似调用 OpenAI API 的方式来调用本地的 Ollama 模型。

配置 OpenAI 客户端

首先,需要将 OpenAI 客户端的 API 请求重定向到本地 Ollama 服务。你可以使用以下命令指定 Ollama 服务的 API 密钥和本地 API 端点:

export OPENAI_API_KEY=ollama-api-key
export OPENAI_API_BASE_URL=http://localhost:11434/v1

此时,任何通过 OpenAI 客户端发起的请求将会转发给 Ollama 的本地服务。

通过 OpenAI 客户端发起请求

使用 OpenAI Python SDK 或其他 OpenAI 客户端库调用 Ollama 模型进行推理。例如,使用 Python 调用 llama2 模型:

import openai

openai.api_key = 'ollama-api-key'
openai.api_base = 'http://localhost:11434/v1'

response = openai.Completion.create(
  model="llama2",
  prompt="What is the capital of France?",
  max_tokens=50
)

print(response.choices[0].text.strip())

该代码将通过本地的 Ollama 服务运行 llama2 模型,并返回结果。

五、Ollama的并发与性能优化

Ollama 支持通过设置环境变量来优化并发处理和性能。常用的性能优化配置包括:

  • 并发限制:通过 OLLAMA_CONCURRENCY 设置最大并发请求数。例如:

    export OLLAMA_CONCURRENCY=4
    
  • 批处理大小:通过 OLLAMA_MAX_BATCH_SIZE 设置批处理推理的最大大小,优化推理吞吐量。例如:

    export OLLAMA_MAX_BATCH_SIZE=16
    
  • 缓存管理:通过 OLLAMA_CACHE_PATH 设置缓存路径,加速重复推理请求的处理。

六、日志与调试

Ollama 提供详细的日志功能,帮助开发者进行调试和性能监控。通过 OLLAMA_LOG_LEVEL 环境变量,用户可以控制日志的详细程度,例如:

export OLLAMA_LOG_LEVEL=debug

日志文件可以通过 OLLAMA_LOG_FILE 指定路径进行存储。例如:

export OLLAMA_LOG_FILE=~/ollama_logs/debug.log

日志级别包括 debuginfowarnerror。设置为 debug 级别时,系统会记录详细的调试信息,帮助开发者排查问题。

七、总结

Ollama 是一个强大的本地大模型推理平台,支持用户通过命令行、HTTP API 和 OpenAI 客户端进行多样化的模型调用。通过合理配置环境变量和优化推理流程,Ollama 能够为用户提供高效的本地化推理解决方案。

无论是在隐私敏感的本地化环境中,还是需要高性能的大规模推理任务,Ollama 都是一个理想的选择。

希望本文为你提供了清晰的 Ollama 基础使用指南,从模型拉取、推理,到多种访问方式,你现在可以轻松开始使用 Ollama 进行本地化模型推理了!