tsx81428 发表于 2024-10-20 06:47:50

ollama 摆设教程(window、linux)

目录
一、官网
二、安装方式一:window10版本下载
三、安装方式二:linux版本docker
四、 模型库
五、运行模型
六、API服务
七、python调用
ollama库调用
langchain调用 
requests调用
aiohttp调用
八、模型添加方式
1.线上pull
2.导入 GGUF 模型文件
3.导入 safetensors 模型文件
九、摆设Open WebUI

参考链接:Ollama完备教程:当地LLM管理、WebUI对话、Python/Java客户端API应用 - 老牛啊 - 博客园 (cnblogs.com)https://csdnimg.cn/release/blog_editor_html/release2.3.7/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=O83Ahttps://www.cnblogs.com/obullxl/p/18295202/NTopic2024071001
一、官网

在 macOS 上下载 Ollama - Ollama 中文
二、安装方式一:window10版本下载

https://i-blog.csdnimg.cn/direct/87d074bfec6d4e2385704cf6fb897766.png
https://i-blog.csdnimg.cn/direct/8c0cc89a5a01425791570ff56b7b3d57.png
安装完成没有提示。 接下来配置情况变量!
   Ollama的安装过程,与安装其他普通软件并没有什么两样,安装完成之后,有几个常用的系统情况变量参数发起进行设置:

[*]OLLAMA_MODELS:模型文件存放目录,默认目录为当前用户目录(Windows 目录:C:\Users%username%.ollama\models,MacOS 目录:~/.ollama/models,Linux 目录:/usr/share/ollama/.ollama/models),假如是 Windows 系统发起修改(如:D:\OllamaModels),制止 C 盘空间吃紧
[*]OLLAMA_HOST:Ollama 服务监听的网络地点,默认为127.0.0.1,假如允许其他电脑访问 Ollama(如:局域网中的其他电脑),发起设置成0.0.0.0,从而允许其他网络访问
[*]OLLAMA_PORT:Ollama 服务监听的默认端口,默认为11434,假如端口有辩论,可以修改设置成其他端口(如:8080等)
[*]OLLAMA_ORIGINS:HTTP 客户端哀求来源,半角逗号分隔列表,若当地使用无严格要求,可以设置成星号,代表不受限定
[*]OLLAMA_KEEP_ALIVE:大模型加载到内存中后的存活时间,默认为5m即 5 分钟(如:纯数字如 300 代表 300 秒,0 代表处理哀求响应后立刻卸载模型,任何负数则表现不停存活);我们可设置成24h,即模型在内存中保持 24 小时,提高访问速度
[*]OLLAMA_NUM_PARALLEL:哀求处理并发数量,默认为1,即单并发串行处理哀求,可根据实际情况进行调解
[*]OLLAMA_MAX_QUEUE:哀求队列长度,默认值为512,可以根据情况设置,超过队列长度哀求被抛弃
[*]OLLAMA_DEBUG:输出 Debug 日记标识,应用研发阶段可以设置成1,即输出详细日记信息,便于排盘问题
[*]OLLAMA_MAX_LOADED_MODELS:最多同时加载到内存中模型的数量,默认为1,即只能有 1 个模型在内存中

https://i-blog.csdnimg.cn/direct/9b90a74c161447f89124bcdf7e80a76c.png
https://i-blog.csdnimg.cn/direct/491a866a0e30468e999cb5acd831d24d.pnghttps://i-blog.csdnimg.cn/direct/670610498d6749ebaf680ce8e3517d23.pnghttps://i-blog.csdnimg.cn/direct/4893298130424534b9e77eda54a634bb.png
看看是不是已经启动了ollama。右下角图标如下 
https://i-blog.csdnimg.cn/direct/e367feb774794cddb5a4c75fe7cbc6b5.png
假如没有,则去打开一下
https://i-blog.csdnimg.cn/direct/bf02a6da61c6438c9c39caf3e65d2643.png
黑窗口查看一下 版本
https://i-blog.csdnimg.cn/direct/8ab28eccf9b146d890f9823ab94d8581.png
浏览器查看一下API服务:127.0.0.1:11434
https://i-blog.csdnimg.cn/direct/739b70d8809e4cb38ad0935d1fbd6728.png
 假如出现连接不上,则查抄一下情况变量是不是配错了,是不是没有E盘(假如你照抄)。 
运行一个0.5b的qwen模型
ollama run qwen2:0.5b https://i-blog.csdnimg.cn/direct/4b98a8b8d4f14421af2b9bed566ea525.pnghttps://i-blog.csdnimg.cn/direct/1aba549c5560485392ebb709d875ba8f.png
看看API访问情况: 
提问:
https://i-blog.csdnimg.cn/direct/2c8bd3d6601744c2b03c03b7cf2b3c6e.png
对话: 
https://i-blog.csdnimg.cn/direct/34d48eb4a9544a5bbce9ef8b17e36730.png
   ① system 代表系统设定(也就是告诉chatGPT他的角色)
② user 表现用户
③ assistant 表现GPT的回复
三、安装方式二:linux版本docker

Olama现已作为官方Docker镜像提供 · Olama博客 - Ollama 中文
docker run -d -v /home/ollama:/root/.ollama -p 11435:11434 --name ollama ollama/ollama   主机的/home/ollama文件夹映射到容器的/root/.ollama文件夹
主机的11435端口映射到容器的11434端口 
https://i-blog.csdnimg.cn/direct/83722ea8b3ed49979bcdda8466b0d696.png https://i-blog.csdnimg.cn/direct/ec115753852f44fa824bbedceed522f8.png
https://i-blog.csdnimg.cn/direct/60a042db48144400b0389ba9d4e4fd40.png
进入容器内部:
docker exec -it ollama /bin/bash  查看ollama实行
ollama https://i-blog.csdnimg.cn/direct/1e397fbe60ca48b19f4547d44672f3bc.png
   ollama serve    # 启动ollama
ollama create    # 从模型文件创建模型
ollama show        # 显示模型信息
ollama run        # 运行模型,会先自动下载模型
ollama pull        # 从注册仓库中拉取模型
ollama push        # 将模型推送到注册仓库
ollama list        # 列出已下载模型
ollama ps        # 列出正在运行的模型
ollama cp        # 复制模型
ollama rm        # 删除模型
# 本地模型列表
>ollama list
NAME            ID            SIZE    MODIFIED
gemma2:9b       c19987e1e6e2    5.4 GB7 days ago
qwen2:7b      e0d4e1163c58    4.4 GB10 days ago # 删除单个模型
>ollama rm gemma2:9b
deleted 'gemma2:9b'

>ollama list
NAME            ID            SIZE    MODIFIED
qwen2:7b      e0d4e1163c58    4.4 GB10 days ago # 启动本地模型
>ollama run qwen2:0.5b
>>> # 运行中模型列表
>ollama ps
NAME            ID            SIZE    PROCESSOR       UNTIL
qwen2:0.5b      6f48b936a09f    693 MB100% CPU      4 minutes from now # 复制本地大模型:ollama cp 本地存在的模型名 新复制模型名
>ollama cp qwen2:0.5b Qwen2-0.5B
copied 'qwen2:0.5b' to 'Qwen2-0.5B'

>ollama list
NAME                  ID            SIZE    MODIFIED
Qwen2-0.5B:latest       6f48b936a09f    352 MB4 seconds ago
qwen2:0.5b            6f48b936a09f    352 MB29 minutes ago
qwen2:7b                e0d4e1163c58    4.4 GB10 days ago
四、 模型库

library (ollama.com)
https://i-blog.csdnimg.cn/direct/e07a85340457489ab4aa33b7591bc8aa.png
五、运行模型

模型要求
https://i-blog.csdnimg.cn/direct/0c52fcde422246499a8fb27a8e3d1d7d.png
 这里我们运行一个要求最小的0.5B的qwen模型。
https://i-blog.csdnimg.cn/direct/357a659bc23540e5af3484eee1b4c810.png
留意这是在容器内部运行的: 
ollama run qwen2:0.5b root@535ec4243693:/# ollama run qwen2:0.5b
pulling manifest
pulling 8de95da68dc4... 100% ▕████████████████████████████████████▏ 352 MB                        
pulling 62fbfd9ed093... 100% ▕████████████████████████████████████▏182 B                        
pulling c156170b718e... 100% ▕████████████████████████████████████▏11 KB                        
pulling f02dd72bb242... 100% ▕████████████████████████████████████▏   59 B                        
pulling 2184ab82477b... 100% ▕████████████████████████████████████▏488 B                        
verifying sha256 digest
writing manifest
removing any unused layers
success
>>> 你是谁
我是来自阿里云的超大规模语言模型——通义千问。我能够理解、生产、传播各种语言和文字,可以回答您在任
何语言或任何问题的问题。

>>> Send a message (/? for help)
六、API服务

文档地点:
   

[*]model:(必需)模型名称
[*]prompt:生成响应的提示
[*]suffix:模型响应后的文本
[*]images:(可选)base64 编码图像列表(对于多模态模型,比方llava)
高级参数(可选):


[*]format:返回响应的格式。目前唯一接受的值是json
[*]options:Modelfile 文档中列出的其他模型参数,比方temperature
[*]system:系统消息更改为(覆盖Modelfile)
[*]template:要使用的提示模板(覆盖Modelfile)
[*]context:从上一个哀求返回的 context 参数 to ,这可用于保持较短的对话记忆/generate
[*]stream:假如响应将作为单个响应对象返回,而不是对象流false
[*]raw:假如没有格式将应用于提示。假如您在对 API 的哀求中指定了完备的模板化提示,则可以选择使用该参数trueraw
[*]keep_alive:控制模型在哀求后加载到内存中的时间(默认值:5m)
curl --location --request POST 'http://127.0.0.1:11435/api/generate' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--data-raw '{
    "model": "qwen2:0.5b",
    "prompt": "你知道麦克斯韦吗"
}' curl --location --request POST 'http://127.0.0.1:11435/api/chat' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--data-raw '{
    "model": "qwen2:0.5b",
    "messages": [
      {
            "role": "system",
            "content": "你是一个历史专家"
      },
      {
            "role": "user",
            "content": "东北三省是哪三个?"
      },
      {
            "role": "assistant",
            "content": "东北三省是指中国东北地区(不含内蒙古)。它包括吉林省的延边朝鲜族自治州、黑龙江省的黑河市和哈尔滨市,以及辽宁省的抚顺市、本溪市、丹东市。其中,延边州包括临山子、龙沙等13个县市。"
      },
      {
            "role": "user",
            "content": "张作霖的势力是在这里兴起的吗"
      }
    ],
    "stream": false
}'   ① system 代表系统设定(也就是告诉chatGPT他的角色)
② user 表现用户
③ assistant 表现GPT的回复
 API访问会激活模型,颠末keep_alive的时间内(默认5m)假如没有访问,则会自动下线模型。当再次有API访问,则会再次自动激活模型。
假如keep_alive的值为零0,则是自动将模型下线。比如:
curl http://localhost:11434/api/chat -d '{
"model": "llama3.1",
"messages": [],
"keep_alive": 0
}' 七、python调用

   

[*]temperature:用于调解生成结果的创造性程度,设置越高,生成的文本越新颖、越独特,设置越低,结果更集中。
[*]stream:默认false,是否流式传输回部分进度。
[*]format: 转录输出的格式,可选项包罗json、str等。

ollama库调用

pip install ollama import ollama

host = "127.0.0.1"
port = "11434"
client = ollama.Client(host=f"http://{host}:{port}")
res = client.chat(model="qwen2:0.5b",
                  messages=[{"role": "user", "content": "你是谁"}],
                  options={"temperature": 0})

print(res)
langchain调用 

pip install langchain
pip install langchain_community from langchain_community.llms import Ollama
host="127.0.0.1"
port="11434" #默认的端口号为11434
llm=Ollama(base_url=f"http://{host}:{port}", model="qwen2:0.5b",temperature=0)
res=llm.invoke("你是谁")
print(res) requests调用

pip install requests host="127.0.0.1"
port="11434"
url = f"http://{host}:{port}/api/chat"
model = "qwen2:0.5b"
headers = {"Content-Type": "application/json"}
data = {
      "model": model, #模型选择
      "options": {
            "temperature": 0.#为0表示不让模型自由发挥,输出结果相对较固定,>0的话,输出的结果会比较放飞自我
         },
      "stream": False, #流式输出
      "messages": [{
            "role": "system",
            "content":"你是谁?"
      }] #对话列表
    }
response=requests.post(url,json=data,headers=headers,timeout=60)
res=response.json()
print(res)
aiohttp调用

pip install aiohttp Welcome to AIOHTTP — aiohttp 3.10.5 documentation
import asyncio
import json
import aiohttp

host = "127.0.0.1"
port = "11434"
url = f"http://{host}:{port}/api/chat"

headers = {
    'Content-Type': 'application/json'
}

payload = json.dumps({
    "model": "qwen2:0.5b",
    "options": {
      "temperature": 0.# 为0表示不让模型自由发挥,输出结果相对较固定,>0的话,输出的结果会比较放飞自我
    },
    "messages": [
      {"role": "system", "content": "你是一个历史砖家,专门胡说八道,混淆历史"},
      {"role": "user", "content": "吕雉和吕不韦是啥关系?汉朝是大秦帝国的延续吗?"}
    ],
    "stream": False
})


async def main():
    start_time = asyncio.get_event_loop().time()
    async with aiohttp.ClientSession() as session:
      try:
            async with session.post(url, headers=headers, data=payload, timeout=60) as response:
                if response.status == 200:
                  data = await response.text()
                  print(data)
                  end_time = asyncio.get_event_loop().time()
                  elapsed_time = end_time - start_time
      except asyncio.TimeoutError:
            print("请求超时了")

      finally:
            print(f"耗时:0.0570秒")


if __name__ == '__main__':
    asyncio.run(main())
八、模型添加方式

1.线上pull(推荐)

即上述教程采用的方式。
https://i-blog.csdnimg.cn/direct/29604c5a774945a79808ca0a2a9b554c.png
2.导入 GGUF 模型文件(推荐)

windows示例:

①.下载模型

从 HF 或者 ModeScope 下载了 GGUF 文件:qwen2-0_5b-instruct-q4_0.gguf
https://i-blog.csdnimg.cn/direct/223f899b361c4ca3ba122e3c96101cb5.pnghttps://i-blog.csdnimg.cn/direct/9e92f141bbcd4dfe99ff9be358d64203.png
②.上传文件

新建一个文件夹来存放GGUF文件,比方我存放在E:\huggingface_models\qwen2-05b-q4中,在GGUF文件的同级,创建一个文件名为Modelfile的文件,该文件的内容如下:
FROM ./qwen2-0_5b-instruct-q4_0.gguf https://i-blog.csdnimg.cn/direct/6864d7cddc494b9e93ebee147f54cc86.png
③.导入模型

打开Modelfile所在文件夹下打开终端,实行命令导入模型文件:
ollama create 模型名称 -f ./Modelfile ollama create qwen2-05b-q4 -f ./Modelfile https://i-blog.csdnimg.cn/direct/eb8dac9dbfdd4e5eab54af8b5efd130c.png
④.查看模型

导入成功之后,我们就可以通过list定名,看到名为qwen2-05b-q4的当地模型了,后续可以和其他模型一样进行管理了。
https://i-blog.csdnimg.cn/direct/0d7f6cc3c36f43a38740a6940e2a936e.png
⑤.运行模型

ollama run qwen2-05b-q4:latest https://i-blog.csdnimg.cn/direct/3bd2a92342a8454c9cca32156e8584f8.png
Linux示例:

①.在主机的/home/ollama文件夹下新建huggingface_models文件夹,

②.再在huggingface_models文件夹下新建qwen2-05b-q4文件夹。

③.将模型文件和Modelfile上传到上一步创建的qwen2-05b-q4文件夹中。

/home/ollama/huggingface_models/qwen2-05b-q4 https://i-blog.csdnimg.cn/direct/6a98baab19d44927bd7d00d420253bb7.png
④.进入ollama容器

docker exec -it ollama bash ⑤.cd 到映射的文件夹中

cd /root/.ollama/huggingface_models/qwen2-05b-q4 https://i-blog.csdnimg.cn/direct/398af8768dd9470db3b71482e0e87500.png
⑥. 实行导入模型命令

ollama create qwen2-05b-q4 -f ./Modelfile https://i-blog.csdnimg.cn/direct/7de74d6b76b8437d95d5d9ea35e73725.png⑦.查看导入的模型

ollama list  https://i-blog.csdnimg.cn/direct/0e6af468d9274acba288c9f52f5ec507.png
⑧.运行模型

ollama run qwen2-05b-q4:latest https://i-blog.csdnimg.cn/direct/3dee797c1a9f4d6db238a1cbe4f244c2.png
https://i-blog.csdnimg.cn/direct/bcec4079c522480290c7c7e7cfc20b87.png
https://i-blog.csdnimg.cn/direct/d8610c77139f4c8a979bebcb50673e97.png
3.导入 safetensors 模型文件(多了一个将safetensors转换成gguf文件的过程)

示例:
①.下载模型文件

从 HF 或者 ModeScope 下载了 safetensors 文件
https://huggingface.co/Qwen/Qwen2.5-0.5B/tree/main
https://i-blog.csdnimg.cn/direct/22e5b5d256cb4ef2aca97e9c56d185ee.pnghttps://i-blog.csdnimg.cn/direct/37b82f64704748ffacdc6f267f036fb2.png
将模型所有文件上传到linux
在linux上新建一个文件夹huggingface_safetensors_models,再在内里新建一个文件夹qwen2-05b-q4,然后将模型所有文件上传进去
 https://i-blog.csdnimg.cn/direct/262b7f2cf44a4816817cac528fa4b01d.png
②.克隆ollama/ollama项目

git克隆,并设置python情况,最好是虚拟情况,防止依赖版本与其他项目辩论。可能会有类似下面的错误。博主使用的是conda,以此为例:
https://i-blog.csdnimg.cn/direct/9cdfc5485c60409198d8be45fd06d2bd.png
ollama/ollama: Get up and running with Llama 3.1, Mistral, Gemma 2, and other large language models. (github.com)
git clone git@github.com:ollama/ollama.git ollama https://i-blog.csdnimg.cn/direct/1612baddaa334593a67418a25e9d4853.png
进入项目中
cd ollama 紧接着,同步 llm/llama.cpp 子模块
git submodule init
git submodule update llm/llama.cpp https://i-blog.csdnimg.cn/direct/f6a26ad839174d8dae16dfeeecb22b12.png
③.设置情况

创建一个虚拟情况 
conda create -n ollama python=3.11 https://i-blog.csdnimg.cn/direct/d1a782d072624f72af85673f52a1a439.png 
激活虚拟情况 
conda activate ollama https://i-blog.csdnimg.cn/direct/b0f0160678e94b2c92739a1c3bbd7b97.png

④.安装依赖

进入项目目录
cd /home/ollama/ollama https://i-blog.csdnimg.cn/direct/1d706a5688774c29b85a004a65021137.png 
实行安装命令
pip install -r llm/llama.cpp/requirements.txt https://i-blog.csdnimg.cn/direct/b52c23c28d644648bc695c1f5186e27d.png 
假如报错,就多装几次,可能网络时间太长断开了。 

 ④.构建量化工具
假如没有make命令则安装一个make
sudo apt update sudo apt install make 假如没有gcc 和 g++ 编译器 则需要安装一下
sudo apt update sudo apt install build-essential 下边这个可选(可以加速) 
sudo apt install ccache  构建量化工具
make -C llm/llama.cpp quantize https://i-blog.csdnimg.cn/direct/d5b233909a394659971702803a6c8ca4.png
 ⑤.模型转换

将 safetensors 转换为 converted.bin格式:
https://i-blog.csdnimg.cn/direct/9c374566de244305a12f3f3de39f6c0c.png
python llm/llama.cpp/convert_hf_to_gguf.py 模型所在文件夹 --outtype f16 --outfile converted.bin python llm/llama.cpp/convert_hf_to_gguf.py /home/ollama/huggingface_safetensors_models/qwen2-05b-q4 --outtype f16 --outfile converted.bin 留意:某些模型架构需要使用特定的转换脚本。比方,Qwen 模型需要运行 
   1.outtype 指定了模型的格式,这里是 f16,也就是 float16 
2.生成的converted.bin文件在ollama项目的根目录下
https://i-blog.csdnimg.cn/direct/7b5412d9b3aa47de9c037264d8c5e633.pnghttps://i-blog.csdnimg.cn/direct/ce1256c755c54b7e898555da9b5738e7.png
⑥.生成llama系列文件

进入llama.cpp文件夹
cd llm/llama.cpp/ 实行make命令 
make https://i-blog.csdnimg.cn/direct/5010d5fb356e41a88ed1bc5213432bb5.png 
此时在llama.cpp文件夹下生成了一些列的llama文件,其中有一个llama-quantize是我们需要的。 
https://i-blog.csdnimg.cn/direct/b3e45c4b7dad48acbf54625dc719482a.png 
 ⑦.量化模型

回到ollama项目目录下
https://i-blog.csdnimg.cn/direct/5b8bac81b51a419cabc02c36d8118c8a.png
上面转换的事f16,也就是float16,此时的访问速度很慢,我们需要向量化来加速它的计算速度。
这里我们量化成q4,也就是int4:
llm/llama.cpp/llama-quantize converted.bin quantized.bin q4_0 https://i-blog.csdnimg.cn/direct/08a9b22d7757438f89522efd5beee0da.png
此时在ollama项目的根目录下生成了我们需要的文件:quantized.bin,它与gguf文件作用雷同。
https://i-blog.csdnimg.cn/direct/7df6f0953e094b3880987cdf33a950d6.png
⑧.将quantized.bin文件放到我们的平常存放gguf文件的文件夹中:

我们将quantized.bin文件放到我们的平常存放gguf文件的文件夹中,比如我放到了huggingface_models,在huggingface_models中新建了一个文件夹qwen2-05b-q4-s来存放。
cp /home/ollama/ollama/quantized.bin /home/ollama/huggingface_models/qwen2-05b-q4-s/quantized.bin https://i-blog.csdnimg.cn/direct/6e0367a151a645de9cb67914ad6000be.png
在 quantized.bin同级新建Modelfile文件,内容如下
FROM quantized.bin ⑨.导入模型文件:ollama create 模型名称 -f ./Modelfile

进入ollama容器中
docker exec -it ollama bash 进入存放模型的文件夹中
cd /root/.ollama/huggingface_models/qwen2-05b-q4-s https://i-blog.csdnimg.cn/direct/6beadd2b0122474c97153446a82e9e97.png
 实行命令,创建Ollama模型
ollama create qwen2-05b-q4-s -f ./Modelfile https://i-blog.csdnimg.cn/direct/87ad319d813b4e38a3dfc918ad921fdb.png ⑩.查看模型

ollama list https://i-blog.csdnimg.cn/direct/3029e0241e0e42dea30d84f9ae0edae2.png 
⑪.运行模型

ollama run qwen2-05b-q4-s:latest https://i-blog.csdnimg.cn/direct/4fdd59f215424049a71df1d54d164771.png
九、摆设Open WebUI

 
页: [1]
查看完整版本: ollama 摆设教程(window、linux)