我们将使用Hugging Face空间来部署我们的 LLM。Hugging Face 提供基本 CPU、2 个 vCPU、16GB RAM 和 50GB 免费存储空间!
GGML
GGML 是一个用于机器学习的 C 语言库。它能够帮助在常规计算机芯片(CPU)上运行大型语言模型(LLMs)。它使用一种特殊的数据表示方式(二进制格式)来共享这些模型。为了使其在普通硬件上良好运行,GGML 使用了一种称为量化的技术。这种技术有不同的级别,如4位、5位和8位量化。每个级别都有其效率和性能之间的自己的平衡。
缺点
这里的主要缺点是延迟。由于此模型将在 CPU 上运行,我们不会像部署在 GPU 上的模型那样快速收到响应,但延迟并不过度。平均而言,它在 huggingface 空间上生成140-150个标记需要大约1分钟。实际上,它在配有16核 CPU 的本地系统上表现得相当好,提供响应时间不到15秒。
模型
为了演示目的,我们将部署 Zephyr-7B-Beta SOTA 模型。你可以在 Huggingface 找到各种大小的 Zephyr GGUF 量化格式。
GGUF 是 GGML 的更新版本,提供了更多的灵活性、可扩展性和兼容性。它旨在简化用户体验,并适应各种模型。GGML 尽管是有价值的早期成果,但它有局限性,GGUF 寻求克服这些局限性。
我们已经选择了 Zephyr-7b-beta.Q4_K_S.gguf。这是一个4位量化的小型模型,速度快并且质量损失最小。
编码时间
我们已在两个环境中部署了 Zephyr 模型:
API部署LLM
部署结构
LLM_Deployment_at_zerocost
├── Dockerfile
├── main.py
├── requirements.txt
└── zephyr-7b-beta.Q4_K_S.gguf
要求.txt
python-multipart
fastapi
pydantic
uvicorn
requests
python-dotenv
ctransformers
zephyr-7b-beta.Q4_K_S.gguf
在 huggingface 上下载ephyr-7b-beta.Q4_K_S.gguf 模型。
main.py
main.py 文件包含一个 FastAPI 函数,用于返回 Zephyr-7B 的完成结果。
from ctransformers import AutoModelForCausalLM
from fastapi import FastAPI
from pydantic import BaseModel
llm = AutoModelForCausalLM.from_pretrained("zephyr-7b-beta.Q4_K_S.gguf",
model_type='mistral',
max_new_tokens = 1096,
threads = 3,
)
#Pydantic object
class validation(BaseModel):
prompt: str
#Fast API
app = FastAPI()
@app.post("/llm_on_cpu")
async def stream(item: validation):
system_prompt = 'Below is an instruction that describes a task. Write a response that appropriately completes the request.'
E_INST = "</s>"
user, assistant = "<|user|>", "<|assistant|>"
prompt = f"{system_prompt}{E_INST}\n{user}\n{item.prompt}{E_INST}\n{assistant}\n"
return llm(prompt)
Dockerfile
最后,该 Dockerfile 被用来将我们的应用程序容器化以便部署。
FROM python:3.9
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./zephyr-7b-beta.Q4_K_S.gguf /code/zephyr-7b-beta.Q4_K_S.gguf
COPY ./main.py /code/main.py
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
现在,我们的文件已经准备好进行部署。
部署
Huggingface 空间
第一步:创建一个新的 Hugging Face 空间。
第二步:输入空间名称并选择许可证类型。
第三步:选择 Space SDK-Docker(空白)选项。
第四步:最初选择“公开”来复制我们的部署端点,然后点击“创建空间”。
第五步:上传我们上面创建的文件。
LLM_Deployment_at_zerocost
├── Dockerfile
├── main.py
├── requirements.txt
└── zephyr-7b-beta.Q4_K_S.gguf
祝贺你!你已经部署了你的 LLM。
如果代码中没有错误,你会看到它正在运行,如果发生错误,你可以检查日志。
第六步:现在已创建空间,接着点击“嵌入此空间”,并复制空间链接(这将作为你的生产环境 API 密钥)。
复制直接的网址。
第七步:现在请把设置中的空间可见性设为私密(注意:你的数据和凭证将会在公共空间中被曝光)。
所有步骤现已完成,我们已经成功部署了我们的LLM。让我们开始测试我们的API。
这是我们的空间链接:https://gathnex-llm-deployment-zerocost-api.hf.space
在网址后加上/docs来启用Swagger UI并测试我们的API。
Fast API swagger:https://gathnex-llm-deployment-zerocost-api.hf.space/docs
端点:https://gathnex-llm-deployment-zerocost-api.hf.space/llm_on_cpu
我们还在Gradio空间中部署了Zephyr.
HF CPU 上的聊天 UI Playground
结论
我们已成功地将LLM部署在生产环境中,并提供了一个API接口。你可以使用它来进行小型自动化任务、文本生成、代理任务等。对于那些希望部署自己的定制模型而又不想承担高昂的GPU成本的人来说,它非常有用。