使用ollama快速部署开源大模型

最后发布时间 : 2025-02-26 17:46:40 浏览量 :

什么是LLaMA?

LLaMA由Meta AI(前身为Facebook AI)开发,是一个大型语言模型家族,旨在使尖端NLP的访问民主化。与GPT模型相比,它针对较小规模的设置进行了优化,使研究人员和开发人员更容易使用。

特点:

  • 高效扩展:
    • LLaMA在不需要大规模基础设施的情况下实现了强大的性能。
    • 设计用于在有限的计算资源上进行高效的微调和推理。
  • 支持众多功能:
    • 支持文本摘要、翻译、情感分析和问答等任务。
  • 大小模型都有:
    • LLaMA有各种大小,从70亿到650亿个参数,允许开发人员根据他们的用例和计算约束选择模型。
  • 开源

什么是Ollama?

Ollama是一个旨在简化LLaMA模型部署和使用的框架。它使开发人员能够在本地或云环境中运行LLaMA模型,使其更易于实际应用程序访问。

特点:

  • 简化设置:
    • Ollama为运行LLaMA模型提供了预配置的环境,无需复杂的设置步骤。
    • 它支持在各种平台上安装,包括Google Colab。
  • 模型本地托管:
    • Ollama允许用户将LLaMA模型作为API提供,从而可以轻松集成到应用程序中。
  • 定制交互:
    • 支持微调和定制,以使模型适应特定任务。
  • 优化性能:
    • 包括用于高效推理的工具,即使在内存有限的GPU等受限硬件设置上也是如此。

使用CPU模式快速开始

第一步运行curl -fsSL https://ollama.com/install.sh | sh安装ollama

$ curl -fsSL https://ollama.com/install.sh | sh
# >>> Installing ollama to /usr/local
# [sudo] wy 的密码: 
# >>> Downloading Linux amd64 bundle
# ######################################################################## 100.0%
# >>> Creating ollama user...
# >>> Adding ollama user to render group...
# >>> Adding ollama user to video group...
# >>> Adding current user to ollama group...
# >>> Creating ollama systemd service...
# >>> Enabling and starting ollama service...
# Created symlink /etc/systemd/system/default.target.wants/ollama.service → /etc/systemd/system/ollama.service.
# >>> The Ollama API is now available at 127.0.0.1:11434.
# >>> Install complete. Run "ollama" from the command line.
# WARNING: No NVIDIA/AMD GPU detected. Ollama will run in CPU-only mode.

快速运行Meta的模型llama3.2:1b

$ ollama pull llama3.2:1b
# pulling manifest 
# pulling 74701a8c35f6...  12% ▕████████████                                                                                                 ▏ 156 MB/1.3 GB   11 MB/s   1m42s

此处可能存在网络问题,解决网络问题

查看已经下载的模型

$ ollama ls
# NAME           ID              SIZE      MODIFIED       
# llama3.2:1b    baf6a787fdff    1.3 GB    39 minutes ago 

运行模型

$ ollama run llama3.2:1b
# >>> hi
# Hello. How can I assist you today?

使用api的方式调用模型

$ curl http://localhost:11434/api/generate -d '{
>   "model": "llama3.2:1b",
>   "prompt":"Why is the sky blue?"
> }'
# {"model":"llama3.2:1b","created_at":"2025-02-24T06:18:38.472602481Z","response":"The","done":false}
# {"model":"llama3.2:1b","created_at":"2025-02-24T06:18:38.695488158Z","response":" sky","done":false}
$ curl http://localhost:11434/api/chat -d '{
  "model": "llama3.2:1b",
  "messages": [
    { "role": "user", "content": "why is the sky blue?" }
  ]
}'
# {"model":"llama3.2:1b","created_at":"2025-02-24T06:19:04.859558101Z","message":{"role":"assistant","content":"The"},"done":false}
# {"model":"llama3.2:1b","created_at":"2025-02-24T06:19:05.097138857Z","message":{"role":"assistant","content":" sky"},"done":false}

查看运行中的模型

$ ollama ps
# NAME           ID              SIZE      PROCESSOR    UNTIL                   
# llama3.2:1b    baf6a787fdff    2.2 GB    100% CPU     About a minute from now  

使用GPU模式部署

显卡检查与配置

$ lspci | grep -i vga
# 03:00.0 VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev 41)
# 25:00.0 VGA compatible controller: NVIDIA Corporation Device 2204 (rev a1)
$ nvidia-smi 
# +---------------------------------------------------------------------------------------+
# | NVIDIA-SMI 535.183.01             Driver Version: 535.183.01   CUDA Version: 12.2     |
# |-----------------------------------------+----------------------+----------------------+
# | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
# | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
# |                                         |                      |               MIG M. |
# |=========================================+======================+======================|
# |   0  NVIDIA GeForce RTX 3090        Off | 00000000:25:00.0 Off |                  N/A |
# |  0%   30C    P8              12W / 350W |     16MiB / 24576MiB |      0%      Default |
# |                                         |                      |                  N/A |
# +-----------------------------------------+----------------------+----------------------+
#                                                                                          
# +---------------------------------------------------------------------------------------+
# | Processes:                                                                            |
# |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
# |        ID   ID                                                             Usage      |
# |=======================================================================================|
# |    0   N/A  N/A      4292      G   /usr/lib/xorg/Xorg                            4MiB |
# |    0   N/A  N/A      6635      G   /usr/lib/xorg/Xorg                            4MiB |
# +---------------------------------------------------------------------------------------+

NVIDIA GeForce RTX 3090 24G显存

安装运行ollama

$ curl -fsSL https://ollama.com/install.sh | sh
$ ollama pull llama3.2:1b
$ ollama run llama3.2:1b "hi"
Hello. Is there something I can help you with or would you like to chat?

查看模型是否成功加载到GPU中

$ ollama ps
NAME           ID              SIZE      PROCESSOR    UNTIL              
llama3.2:1b    baf6a787fdff    2.7 GB    100% GPU     3 minutes from now 

ollama pull网络问题解决方案

How do I use Ollama behind a proxy?

$ sudo mkdir -p /etc/systemd/system/ollama.service.d
$ cd /etc/systemd/system/ollama.service.d
$ sudo vim http-proxy.conf

http-proxy.conf写入以下内容:

[Service]
Environment="HTTPS_PROXY=http://127.0.0.1:7890"

这里需要有运行在7890口的加速服务器

$ sudo systemctl daemon-reload
$ sudo systemctl restart ollama.service

常见问题

  • 如何判断模型是否已加载到GPU上?
    • 100%GPU意味着模型完全加载到GPU中
    • 100%CPU意味着模型完全加载在系统内存中
    • 48%/52%CPU/GPU意味着模型部分加载到GPU和系统内存中
$ ollama ps
NAME           ID              SIZE      PROCESSOR    UNTIL              
llama3.2:1b    baf6a787fdff    2.7 GB    100% GPU     3 minutes from now 
  • 模型存储在哪里?
    • macOS: ~/.ollama/models
    • Linux: /usr/share/ollama/.ollama/models
    • Windows: C:\Users%username%.ollama\models

使用环境变量OLLAMA_MODELS可以更改默认存储位置

  • 如何管理Ollama服务器可以排队的最大请求数?

    • 如果将太多请求发送到服务器,它将以503错误响应,表明该服务器已重载。可以通过设置Ollama_max_queue调整可能排队的请求数量。
  • Ollama如何处理并发请求?faq

    • Ollama支持两个级别的并发处理
      • 同时加载多个模型(multiple models can be loaded): 如果您的系统有足够的可用内存(使用CPU推理时的系统内存,或用于GPU推理的VRAM),则可以同时加载多个模型。对于给定的模型,如果加载模型时有足够的可用内存,则将其配置为允许并行请求处理。
      • 如果在已经加载一个或多个模型时,没有足够的可用内存来加载新模型请求,则所有新请求将排队等待,直到可以加载新模型。随着先前的模型变得空闲,一个或多个模型将被卸载,为新模型腾出空间。队列中的请求将按顺序处理。当使用 GPU 推断新的模型必须能够完全适合在 VRAM 允许并发模型负载。
    • 给定模型的并行请求处理导致上下文大小增加了并行请求的数量。例如,具有4个并行请求的2K上下文将导致8K上下文和额外的内存分配。
  • OpenAI兼容性问题?openai

    • OpenAI兼容性是实验性的,并且需要进行重大调整,包括破裂变化。有关访问Ollama API的全面访问,请参见Ollama Python库,JavaScript库和REST API。
    • Ollama提供了与OpenAI API部分的实验兼容性,以帮助将现有应用程序连接到Ollama。

参考