Skip to content

Ollama 使用指南

学习如何在 ByteBuddy 中使用 Ollama 来运行本地大语言模型,实现完全离线的 AI 开发体验。

Ollama 简介

Ollama 是一个开源的大语言模型运行器,让您可以在本地运行各种开源模型,包括:

  • 隐私保护:所有数据都在本地处理
  • 离线使用:无需网络连接
  • 成本控制:无 API 调用费用
  • 高度定制:可以微调和定制模型

安装 Ollama

系统要求

最低配置

  • CPU: 4 核心以上
  • 内存: 8GB RAM
  • 存储: 10GB 可用空间
  • 操作系统: macOS, Linux, Windows (WSL2)

推荐配置

  • CPU: 8 核心以上
  • 内存: 16GB RAM
  • GPU: 8GB+ VRAM (NVIDIA)
  • 存储: 20GB+ SSD

安装步骤

macOS

bash
# 使用 Homebrew 安装
brew install ollama

# 或者直接下载
curl -fsSL https://ollama.ai/install.sh | sh

# 启动 Ollama 服务
ollama serve

Linux

bash
# 官方安装脚本
curl -fsSL https://ollama.ai/install.sh | sh

# 使用包管理器
# Ubuntu/Debian
sudo apt update && sudo apt install ollama

# Arch Linux
sudo pacman -S ollama

# 启动服务
sudo systemctl start ollama
sudo systemctl enable ollama

Docker

bash
# 拉取镜像
docker pull ollama/ollama

# 运行容器
docker run -d \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  --name ollama \
  ollama/ollama

# 带 GPU 支持
docker run -d \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  --gpus all \
  --name ollama \
  ollama/ollama

常用模型

推荐模型列表

对话模型

bash
# 7B 模型 (适合日常使用)
ollama pull llama2:7b
ollama pull mistral:7b
ollama pull phi:2.7b

# 13B 模型 (平衡性能和资源)
ollama pull llama2:13b
ollama pull codellama:13b
ollama pull mixtral:8x7b

# 70B 模型 (高性能,需要大量资源)
ollama pull llama2:70b

代码专用模型

bash
# 代码生成和理解
ollama pull codellama:7b
ollama pull codellama:13b
ollama pull codellama:33b
ollama pull deepseek-coder:6.7b
ollama pull starcoder

多语言模型

bash
# 中文友好模型
ollama pull qwen:7b
ollama pull qwen:14b
ollama pull baichuan2:7b
ollama pull baichuan2:13b

模型选择指南

使用场景推荐模型内存需求性能特点
日常对话mistral:7b4GB优秀响应快,质量好
代码开发codellama:7b4GB优秀专为代码优化
中文对话qwen:7b4GB良好中文支持好
高性能需求llama2:13b8GB优秀综合能力强
资源受限phi:2.7b2GB良好轻量级,快速

ByteBuddy 集成配置

基础配置

yaml
# bytebuddy.config.yaml
models:
  chat:
    provider: ollama
    model: mistral:7b
    apiBase: "http://localhost:11434"
    temperature: 0.7
    maxTokens: 2048

完整配置示例

yaml
models:
  # 对话模型
  chat:
    provider: ollama
    model: mistral:7b
    apiBase: "http://localhost:11434"
    temperature: 0.7
    maxTokens: 2048
    topP: 0.9
    topK: 40

  # 代码模型
  code:
    provider: ollama
    model: codellama:7b
    apiBase: "http://localhost:11434"
    temperature: 0.1
    maxTokens: 4096

  # 轻量级模型
  quick:
    provider: ollama
    model: phi:2.7b
    apiBase: "http://localhost:11434"
    temperature: 0.7
    maxTokens: 1000

高级配置

yaml
models:
  chat:
    provider: ollama
    model: mistral:7b
    apiBase: "http://localhost:11434"

    # GPU 配置
    gpu:
      enabled: true
      deviceId: 0
      memoryFraction: 0.8

    # 性能优化
    performance:
      numCtx: 4096 # 上下文长度
      numBatch: 512 # 批处理大小
      numGpu: 1 # GPU 数量
      numThread: 8 # CPU 线程数
      useMMap: true # 内存映射
      useMlock: false # 内存锁定

    # 缓存配置
    cache:
      enabled: true
      keepAlive: "5m" # 模型保活时间
      unloadTimeout: "10m" # 卸载超时

    # 重试配置
    retry:
      maxAttempts: 3
      backoff: "exponential"
      initialDelay: 1000

多模型策略

yaml
models:
  # 智能模型选择
  chat:
    provider: ollama
    modelSelection: auto
    models:
      - name: mistral:7b
        weight: 0.6
        priority: 1
      - name: llama2:7b
        weight: 0.3
        priority: 2
      - name: phi:2.7b
        weight: 0.1
        priority: 3

    # 选择策略
    strategy:
      type: weighted
      fallback: true
      healthCheck: true

  # 基于任务的模型选择
  taskBased:
    provider: ollama
    rules:
      - condition: "task.type == 'code'"
        model: "codellama:7b"
      - condition: "task.type == 'chat'"
        model: "mistral:7b"
      - condition: "task.complexity == 'high'"
        model: "llama2:13b"
      - condition: "resource.limited == true"
        model: "phi:2.7b"

使用场景和最佳实践

1. 完全离线开发

yaml
# 离线配置
models:
  chat:
    provider: ollama
    model: mistral:7b
    offline: true
    cache:
      persistent: true
      path: "./.bytebuddy/cache"

# 工具配置
tools:
  filesystem:
    enabled: true
    offline: true
  terminal:
    enabled: true
    offline: true

# 禁用在线功能
features:
  webSearch: false
  onlineDocs: false
  cloudSync: false

2. 隐私敏感项目

yaml
models:
  secure:
    provider: ollama
    model: codellama:7b
    security:
      dataRetention: 0
      auditLogging: true
      encryption: true

tools:
  filesystem:
    permissions:
      read: ["./src/**"]
      write: []
      blocked: ["./secrets/**"]

privacy:
  anonymization: true
  localProcessing: true
  noTelemetry: true

3. 资源受限环境

yaml
models:
  lightweight:
    provider: ollama
    model: phi:2.7b
    optimization:
      quantization: "4bit"
      contextCompression: true
      batchProcessing: true

performance:
  memory:
    limit: "2GB"
    swap: true
  cpu:
    threads: 2
    priority: "low"

性能优化

硬件优化

GPU 加速配置

yaml
# NVIDIA GPU 配置
gpu:
  enabled: true
  deviceIds: [0]
  memoryFraction: 0.8
  computeCapabilities: ["7.5+", "8.0+", "8.6+", "8.9+", "9.0"]

  # 多 GPU 配置
  multiGpu:
    enabled: false
    deviceIds: [0, 1]
    loadBalancing: "round-robin"

内存优化

yaml
memory:
  # 虚拟内存配置
  swap:
    enabled: true
    path: "./.bytebuddy/swap"
    size: "4GB"

  # 内存映射
  mmap:
    enabled: true
    lockPages: false
    prefetch: true

  # 垃圾回收
  gc:
    strategy: "g1gc"
    heapSize: "1GB"
    maxHeapSize: "2GB"

模型优化

量化配置

yaml
models:
  chat:
    provider: ollama
    model: mistral:7b
    quantization:
      enabled: true
      bits: 4 # 4bit 量化
      calibration: true
      accuracy: "balanced"

上下文优化

yaml
context:
  # 上下文压缩
  compression:
    enabled: true
    strategy: "semantic"
    ratio: 0.7

  # 滑动窗口
  slidingWindow:
    enabled: true
    size: 4096
    overlap: 512

  # 智能截断
  truncation:
    strategy: "importance"
    preserveKey: true

监控和管理

性能监控

yaml
monitoring:
  enabled: true

  # 系统指标
  system:
    cpu: true
    memory: true
    gpu: true
    disk: true

  # 模型指标
  model:
    responseTime: true
    throughput: true
    accuracy: true
    errorRate: true

  # 告警配置
  alerts:
    - name: "High Memory Usage"
      condition: "memory.usage > 90%"
      action: "notify"

    - name: "Slow Response"
      condition: "model.responseTime > 5000ms"
      action: "log"

模型管理

yaml
modelManagement:
  # 自动下载
  autoDownload:
    enabled: false
    requireConfirmation: true

  # 自动更新
  autoUpdate:
    enabled: false
    schedule: "weekly"

  # 清理策略
  cleanup:
    enabled: true
    schedule: "daily"
    keepUnused: 7 # days
    maxDiskUsage: "50GB"

管理命令

bash
# 查看 Ollama 状态
ollama ps

# 查看已安装模型
ollama list

# 删除模型
ollama rm mistral:7b

# 更新模型
ollama pull mistral:7b

# 查看模型信息
ollama show mistral:7b

# 测试模型
time ollama run mistral:7b "Hello, how are you?"

# 查看系统资源使用
ollama stats

# 查看日志
tail -f ~/.ollama/logs/ollama.log

故障排除

常见问题

1. 模型下载失败

bash
# 检查网络连接
curl -I https://ollama.ai

# 手动下载
curl -L https://ollama.ai/download/mistral:7b -o mistral.7b.gguf

# 检查磁盘空间
df -h

# 检查权限
ls -la ~/.ollama

2. 内存不足

bash
# 检查内存使用
free -h

# 增加交换空间
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 使用更小的模型
ollama pull phi:2.7b

# 启用 4bit 量化
# 在配置中设置 quantization: 4bit

3. GPU 不工作

bash
# 检查 NVIDIA 驱动
nvidia-smi

# 检查 CUDA
nvcc --version

# 检查 Docker GPU 支持
docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi

# 重新安装 GPU 版本
# 卸载: docker rm ollama
# 重新安装带 GPU 支持
docker run -d --gpus all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

4. 响应很慢

yaml
# 优化配置
models:
  chat:
    provider: ollama
    model: mistral:7b

    # 减少上下文长度
    maxTokens: 1000

    # 启用批处理
    numBatch: 1024

    # 增加线程数
    numThread: 8

    # 使用 GPU
    numGpu: 1

调试工具

bash
# 启用详细日志
OLLAMA_DEBUG=1 ollama serve

# 测试连接
curl http://localhost:11434/api/tags

# 测试模型调用
curl -X POST http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{"model": "mistral:7b", "prompt": "Hello"}'

# 查看配置
ollama show --format json mistral:7b

最佳实践

1. 模型选择

  • 开始学习:使用 mistral:7b 或 llama2:7b
  • 代码开发:使用 codellama:7b
  • 资源有限:使用 phi:2.7b
  • 中文支持:使用 qwen:7b

2. 系统优化

  • 使用 SSD 存储
  • 配置足够的内存
  • 启用 GPU 加速(如果可用)
  • 定期清理不需要的模型

3. 安全考虑

  • 隔离 Ollama 服务
  • 限制网络访问
  • 定期更新模型
  • 监控异常使用

4. 开发工作流

bash
# 启动脚本示例
#!/bin/bash

# 启动 Ollama
echo "Starting Ollama..."
ollama serve &

# 等待服务启动
sleep 5

# 检查模型
if ! ollama list | grep -q "mistral:7b"; then
    echo "Downloading mistral:7b..."
    ollama pull mistral:7b
fi

# 启动 ByteBuddy
echo "Starting ByteBuddy..."
bytebuddy start

echo "Setup complete!"

相关资源

相关文档