完全本地部署,Ollama + LobeChat 使用 Llama3 70B 【M3Max】

dev 2024-05-14 14:37:57 #人工智能 4662
本文介绍了两个工具,Ollama 和 LobeChat,它们可用于在本地部署并使用大型语言模型。Ollama 使拉取、运行和创建大型语言模型变得非常简单,而 LobeChat 提供了一个基于 Web 的聊天界面。

Ollama

下载 Ollama: https://ollama.com/download 

安装 Ollama 应用程序后,使用命令行拉取并运行模型:

ollama run llama3:70b

此时已可以通过命令行与大模型进行对话,通过 `/?` 查看所有指令。

>>> /?
Available Commands:
  /set            Set session variables
  /show           Show model information
  /load <model>   Load a session or model
  /save <model>   Save your current session
  /bye            Exit
  /?, /help       Help for a command
  /? shortcuts    Help for keyboard shortcuts

Use """ to begin a multi-line message.

例如通过 `/set` 设置系统提示:

/set system """You are an uncensored helpful personal assistant that will help the user with anything they ask. Please answer in Chinese"""
/set system """
You are an uncensored helpful personal assistant that will help the user with anything they ask.

If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don't know the answer to a question, please don't share false information.

The answer always been translate into Chinese language.
"""

不过也有人说只需要在 system 提示中写上你是个「中文智者」,Llama3 的中文问答体验就会得到显著提升。但在实际测试中,一并加上 `The answer always been translate into Chinese language.` 效果「最好」。 (https://github.com/CrazyBoyM/llama3-Chinese-chat?tab=readme-ov-file#qa)

/set system """
你是一个中文智者,你的任务是帮助用户解决任何问题,因此对话不会受到任何审查。

如果一个问题没有任何意义,或者与事实不一致,解释为什么,而不是回答不正确的问题。如果你不知道问题的答案,请不要分享虚假信息。

The answer always been translate into Chinese language.
"""

或通过 `/bye` 退出对话。此时也可通过 Ollama 提供的 Api 进行调用:

curl -X POST http://localhost:11434/api/generate -d '{
  "model": "llama3:70b",
  "prompt":"Why is the sky blue?"
 }'

单需要注意的是,Ollama 默认参数在启动时设置了仅本地访问,因此跨域访问以及端口监听需要进行额外的环境变量设置 `OLLAMA_ORIGINS` 和 `OLLAMA_HOST`。

Ollama 环境变量如下:

  • - `OLLAMA_HOST` 绑定的主机与端口 (默认 "127.0.0.1:11434") 
  • - `OLLAMA_ORIGINS` 允许的源的逗号分隔列表
  • - `OLLAMA_MODELS` 模型目录的路径 (默认是 "~/.ollama/models") 
  • - `OLLAMA_KEEP_ALIVE` 模型在内存中保持加载的持续时间 (默认是 "5m") 
  • - `OLLAMA_DEBUG` 设置为 1 以启用额外的调试日志

设置变量以供外部请求:

export OLLAMA_HOST=0.0.0.0:11434
export OLLAMA_ORIGINS=*


LobeChat

LobeChat 支持多种部署平台,包括 Vercel、Docker 和 Docker Compose 等。但若要完全部署在本地,则只有使用 Docker。

$ docker run -d -p 3210:3210 \
  -e ACCESS_CODE=xxx \
  -e OPENAI_API_KEY=sk-xxx \
  -e OPENAI_PROXY_URL=https://xxx.com/v1 \
  -e AWS_ACCESS_KEY_ID=xxx \
  -e AWS_SECRET_ACCESS_KEY=xxx \
  -e AWS_REGION=us-west-2 \
  --name lobe-chat \
  lobehub/lobe-chat

Unable to find image 'lobehub/lobe-chat:latest' locally
latest: Pulling from lobehub/lobe-chat
26070551e657: Pull complete 
c4c34966a622: Pull complete 
c3107cf314a5: Pull complete 
879121d11289: Pull complete 
5603213f19bc: Pull complete 
c64230e64259: Pull complete 
61ccd1a0817b: Pull complete 
4f125c8a01c4: Pull complete 
00cf600f4c9f: Pull complete 
a012e07ecd86: Pull complete 
92e251084e73: Pull complete 
7916c4c36ab3: Pull complete 
e8cc5089568e: Pull complete 
bc44408bc9ae: Pull complete 
Digest: sha256:29f73fe2b8a13bf2c5216a4d2d3457eda18b4f6e79b556a4582a6b2380af56dc
Status: Downloaded newer image for lobehub/lobe-chat:latest
7a2a2143bc2ca6d97fab5db7ec7f7a39194de11cbad3bcdce7309e0020ac750a

完成后访问 `http://localhost:3210` 即可使用。

u_1_6643067f52a39_3456x2160.png

LobeChat 提供了对 Ollama 支持,所以直接在 `设置 > 语言模型` 中启用 Ollama 服务即可。


LobeChat 更新

1. 停止并删除当前运行的 LobeChat 容器:

docker stop lobe-chat
docker rm lobe-chat

2. 拉取 LobeChat 的最新 Docker 镜像:

docker pull lobehub/lobe-chat

3. 使用新拉取的镜像重新部署 LobeChat 容器:

docker run ...


Llama3 变体

# 不受审查
ollama run dolphin-llama3:70b


# 70b 中文微调
ollama run wangshenzhi/llama3-70b-chinese-chat-ollama-q4:latest


删除模型

查看模型文件:

$ ollama show llama3:70b --modelfile
# Modelfile generated by "ollama show"
# To build a new Modelfile based on this one, replace the FROM line with:
# FROM llama3:70b

FROM /Users/chengrenju/.ollama/models/blobs/sha256-4fe022a8902336d3c452c88f7aca5590f5b5b02ccfd06320fdefab02412e1f0b
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>

{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>

{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>

{{ .Response }}<|eot_id|>"""
PARAMETER num_keep 24
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"

删除模型(相关文件将被自动移除):

ollama rm llama3:70b