ollama 本地大模型 for macbook
目录
准备
安装 ollama
下载的安装包,解压后,拖拽到
应用程序
文件夹打开 ollama 后 点击确认
再 提示
Install the command line
,点击输入管理员密码后提示
Finish
确认安装
$ ollama --help
# 确认 ollama 运行在 11434 端口上
$ lsof -i :11434
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ollama 76055 sinlov 6u IPv4 0x832815bf96a7e5b 0t0 TCP localhost:11434 (LISTEN)
ollama cli 基本使用
list
列出已经安装的模型pull
拉取模型run
run 除了拉取模型,还同时将模型对应的交互式控制台运行了起来,不建议这么做,限定死了启动方式rm
移除本地下载的模型ps
查看当前硬件资源占用serve
启动 大模型后台服务
ollama 硬盘占用说明
macOS 上的 Ollama 将文件存储在几个不同的位置
~/.ollama/
~/.ollama/models
拉取的本地模型所在目录~/.ollama/logs
本地日志
/Applications/Ollama.app
程序文件夹~/Library/Preferences/com.electron.ollama.plist
设置文件~/Library/Application\ Support/Ollama
支持目录~/Library/Saved\ Application\ State/com.electron.ollama.savedState
状态文件夹
拉取模型
- 模型格式
<name>:<num><arg>
- name 为模型发布名称,后面
<num><arg>
多少 B 表示模型有 多少 十亿 参数 - 参数规模规格为
B 十亿
M 百万
K 千
- 参数越多,所需 显存 越大,30b 左右差不多需要 20G 专有显存推理
- 参数多不代表准确,不过太小参数的 LLM 容易出现幻觉(瞎扯给结果)
- name 为模型发布名称,后面
下面演示常用模型
# 文本大模型
ollama pull qwen2:7b
# 代码方面
ollama pull codellama:7b
ollama pull starcoder2:7b
设置 ollama 服务
打开应用其实已经在后台 端口 11434 运行
OLLAMA_KEEP_ALIVE
修改这个时间,可以防止重复挂载模型,缺点是更占用资源OLLAMA_HOST
定义当前运行 服务 hostOLLAMA_ORIGINS
跨域配置,这个需要点跨域知识,实在不会问生成式AI,大不了错几次OLLAMA_MODELS
模型文件存储位置,这个选项可以更换下载位置
# 修改模型载入保留时间
launchctl setenv OLLAMA_KEEP_ALIVE "30m"
# 设置跨域主要是允许 容器使用
launchctl setenv OLLAMA_ORIGINS "http://127.0.0.1:*,http://localhost:*,http://172.17.0.1:*,http://host.docker.internal:*"
# 可选项设置跨域
launchctl setenv OLLAMA_ORIGINS "http://127.0.0.1:*,http://localhost:*,http://172.17.0.1:*,http://host.docker.internal:*,http://192.168.50.0:*"
修改后,重启 ollama 服务,方法是 在状态栏点击退出,重新打开即可
说明文档见
自定义开启服务
OLLAMA_HOST="0.0.0.0:11433"
OLLAMA_KEEP_ALIVE="30m"
OLLAMA_ORIGINS="http://127.0.0.1:*,http://localhost:*,http://172.17.0.1:*,http://host.docker.internal:*,http://192.168.50.0:*"
# 这里修改了启动端口 11433
# ollama 启动!!!
ollama serve
应用
本地 open-webui 使用ollama 服务
注意: ollama 是一组后台服务, 使用
大模型
的交互前端
需要另外的部署,这里演示的是 open-webui
创建目录,新增 docker-compose.yml 文件
$ mkdir ollama-app && cd ollama-app
# 使用 vscode 打开目录
$ code .
- docker-compose
- environment
WEBUI_SECRET_KEY
webui secret key 可以通过openssl rand -hex 16
生成OLLAMA_BASE_URL
这个根据实际情况配置HF_ENDPOINT
可以加速模型下载
- volumes
./open-webui/data:/app/backend/data
这个为 当前docker-compose.yml
文件相对目录存储数据
- ports
11435:8080
这个是 webUI 对外服务的 端口 设置 映射到11435
,如果端口占用可以跟换
network_mode: host
如果开启,需要 OrbStack 支持,并且 webUI 服务端口就是 8080
- environment
services:
ollama-local-open-ui:
container_name: "ollama-local-open-ui"
# image: ghcr.io/open-webui/open-webui:v0.3.21-ollama
image: ghcr.io/open-webui/open-webui:v0.3.21
pull_policy: if_not_present
environment: # https://docs.openwebui.com/getting-started/env-configuration/
OLLAMA_BASE_URL: 'http://host.docker.internal:11434' # 这里需要注意,这个地址连不上,也就是支持 extra_hosts 有问题,使用完整 IP address 即可
HF_ENDPOINT: 'https://hf-mirror.com' # 从 https://hf-mirror.com 镜像,而不是https://huggfacing.co 官网下载所需的模型
WEBUI_SECRET_KEY: 'e2ac9c8f3462a9831b238601b8546807' # webui secret key
# PORT: '11435'
extra_hosts:
- host.docker.internal:host-gateway
ports:
- "11435:8080"
# network_mode: host
volumes:
- "./open-webui/data:/app/backend/data"
restart: unless-stopped # always on-failure:3 or unless-stopped default "no"
logging:
driver: json-file
options:
max-size: 2m
使用 本地 open-webui
第一次需要注册账号
设置,进入设置
Settings
- 修改语言
General
->Language
修改为你需要的语言
- 修改语言
设置,进入
设置
->管理员设置
外部链接
确认本地 ollama 链接http://host.docker.internal:11434
可以正常使用- 也可以添加远程 ollama 链接
模型拉取
设置,进入
设置
->管理员设置
->模型
输入需要拉的模型
代码补全
continue 代码插件
Continue 是领先的开源AI代码助手。您可以连接任何模型和任何上下文,在其中构建自定义的自动完成和聊天体验 VS Code 或者 JetBrains
配置前,查找模型的链接, 需要先拉本地模型
# 文本大模型
ollama pull qwen2:7b
# 代码大模型
ollama pull codellama:7b
ollama pull starcoder2:7b
ollama pull codeqwen:7b
# 也可以调整当前设备可以支持
工程目录下
- 新增文件
.continuerc.json
apiBase
内容http://127.0.0.1:11434
更换为其他地址,也可以
{
"cody.autocomplete.advanced.provider": "experimental-ollama",
"models": [
{
"title": "codellama:7b",
"model": "codellama:7b",
"provider": "ollama",
"apiBase": "http://127.0.0.1:11434"
}
],
"tabAutocompleteModel": {
"title": "StarCoder2:7b",
"model": "starcoder2:7b",
"contextLength": 16384,
"provider": "ollama",
"apiBase": "http://127.0.0.1:11434"
},
"embeddingsProvider": {
"title": "qwen2:7b",
"model": "qwen2:7b",
"contextLength": 2048,
"provider": "ollama",
"apiBase": "http://127.0.0.1:11434"
},
"customCommands": [
{
"name": "test",
"prompt": "{{{ input }}}\n\nWrite a comprehensive set of unit tests for the selected code. It should setup, run tests that check for correctness including important edge cases, and teardown. Ensure that the tests are complete and sophisticated. Give the tests just as chat output, don't edit any file.",
"description": "Write unit tests for highlighted code"
}
],
"contextProviders": [
{
"name": "diff",
"params": {}
},
{
"name": "folder",
"params": {}
},
{
"name": "codebase",
"params": {}
},
{
"name": "terminal"
},
{
"name": "docs"
},
{ "name": "search" },
{ "name": "tree" },
{ "name": "os" },
{
"name": "locals",
"params": {
"stackDepth": 3
}
},
{
"name": "open",
"params": {
"onlyPinned": true
}
}
],
"slashCommands": [
{
"name": "edit",
"description": "Edit selected code"
},
{
"name": "comment",
"description": "Write comments for the selected code"
},
{
"name": "share",
"description": "Export the current chat session to markdown"
},
{
"name": "commit",
"description": "Generate a git commit message"
}
]
}
- 如果内存小可以使用这个配置
{
"cody.autocomplete.advanced.provider": "experimental-ollama",
"models": [
{
"title": "qwen2:7b",
"model": "qwen2:7b",
"provider": "ollama",
"apiBase": "http://127.0.0.1:11434"
}
],
"tabAutocompleteModel": {
"title": "StarCoder2:7b",
"model": "starcoder2:7b",
"contextLength": 16384,
"provider": "ollama",
"apiBase": "http://127.0.0.1:11434"
},
"embeddingsProvider": {
"title": "qwen2:7b",
"model": "qwen2:7b",
"contextLength": 2048,
"provider": "ollama",
"apiBase": "http://127.0.0.1:11434"
},
"customCommands": [
{
"name": "test",
"prompt": "{{{ input }}}\n\nWrite a comprehensive set of unit tests for the selected code. It should setup, run tests that check for correctness including important edge cases, and teardown. Ensure that the tests are complete and sophisticated. Give the tests just as chat output, don't edit any file.",
"description": "Write unit tests for highlighted code"
}
],
"contextProviders": [
{
"name": "diff",
"params": {}
},
{
"name": "folder",
"params": {}
},
{
"name": "codebase",
"params": {}
},
{
"name": "terminal"
},
{
"name": "docs"
},
{ "name": "search" },
{ "name": "tree" },
{ "name": "os" },
{
"name": "locals",
"params": {
"stackDepth": 3
}
},
{
"name": "open",
"params": {
"onlyPinned": true
}
}
],
"slashCommands": [
{
"name": "edit",
"description": "Edit selected code"
},
{
"name": "comment",
"description": "Write comments for the selected code"
},
{
"name": "share",
"description": "Export the current chat session to markdown"
},
{
"name": "commit",
"description": "Generate a git commit message"
}
]
}