LLAMA 2 — это мощная языковая модель, которая продемонстрировала замечательные возможности в понимании и создании текста, похожего на человеческий. В этой статье мы проведем вас через процесс развертывания языковой модели LLAMA-2–13b-chat (LLM) в качестве API с использованием платформы FastAPI Python. Это позволит вам взаимодействовать с вашей моделью LLAMA 2 через HTTP-запросы и получать ответ в потоковом режиме, что позволяет использовать широкий спектр приложений, таких как чат-боты, создание контента и многое другое.

Предпосылки

Прежде чем мы углубимся в процесс развертывания, убедитесь, что у вас есть следующие компоненты:

LLAMA 2–13b-chat Модель LLM: у вас должна быть предварительно обученная языковая модель LLAMA2 и сохраненная в подходящем для развертывания формате.

wget https://huggingface.co/TheBloke/Llama-2-13B-chat-GGML/resolve/main/llama-2-13b-chat.ggmlv3.q4_1.bin

Среда Python: настройте среду Python с необходимыми пакетами. Вы можете использовать виртуальные среды для аккуратного управления зависимостями.

pip install llama-cpp-python
git clone https://github.com/ggerganov/llama.cpp
pip install fastapi uvicorn sse-starlette requests
cd llama.cpp

Понимание кода

Давайте начнем с понимания предоставленного фрагмента кода, который послужит основой для развертывания вашего LLAMA 2 LLM в качестве API.

import time
import copy
import asyncio
import requests

from fastapi import FastAPI, Request
from llama_cpp import Llama
from sse_starlette import EventSourceResponse
# Load the model
print("Loading model...")
llm = Llama(model_path="./llama-2-13b-chat.ggmlv3.q4_1.bin") # change based on the location of models
print("Model loaded!")

app = FastAPI()

@app.get("/llama")
async def llama(request: Request, question:str):
    stream = llm(
        f"""{question}""",
        max_tokens=100,
        stop=["\n", " Q:"],
        stream=True,
    )
    async def async_generator():
        for item in stream:
            yield item
    async def server_sent_events():
        async for item in async_generator():
            if await request.is_disconnected():
                break
            result = copy.deepcopy(item)
            text = result["choices"][0]["text"]
            yield {"data": text}
    return EventSourceResponse(server_sent_events())

Приведенный выше код делает следующее:

Импортирует необходимые библиотеки и модули, включая FastAPI, llama_cpp и EventSourceResponse для обработки событий, отправленных сервером (SSE).

  1. Создает экземпляр приложения FastAPI.
  2. Определяет маршрут (/llama) для API. Когда к этой конечной точке отправляется запрос GET, он выполняет функцию llama.
  3. Внутри функции llama:
  • Модель LLAMA2 используется для генерации текста в потоковом режиме. В приведенном примере модель инициализируется с подсказкой и генерируется текст при соблюдении заданных ограничений.
  • Асинхронный генератор определен для получения элементов из потока генерации текста.
  • Другая асинхронная функция, server_sent_events, перебирает элементы, сгенерированные моделью LLAMA2, и выдает сгенерированный текст в виде данных SSE.

4. EventSourceResponse из функции server_sent_events возвращается в качестве ответа API. Это позволяет клиенту получать непрерывный поток текста, сгенерированного моделью LLAMA 2.

Чтобы узнать больше о SSE, см.:



Развертывание вашего LLAMA 2 LLM в качестве API

Теперь, когда мы поняли код, давайте приступим к развертыванию вашего LLAMA 2 LLM в качестве API с использованием FastAPI.

Чтобы запустить сервер FastAPI, выполните в терминале следующую команду:

uvicorn your_script_name:app --host 0.0.0.0 --port 8000

Замените your_script_name именем скрипта Python, содержащего предоставленный код.

Взаимодействие с API: после запуска сервера вы можете взаимодействовать с API LLAMA2 LLM, отправив запрос GET на http://localhost:8000/llama с помощью веб-браузера или такого инструмента, как curl.

Заключение

Поздравляем! Вы успешно развернули свою собственную языковую модель в качестве API с помощью FastAPI. Это развертывание открывает мир возможностей для интеграции вашей модели LLAMA 2 в различные приложения и службы, обеспечивая динамическое создание текста и взаимодействие. При дальнейшем изучении этого API рассмотрите возможность его расширения с помощью обработки ошибок, проверки подлинности и дополнительных функций в соответствии с вашими конкретными требованиями.

Счастливое поколение с развернутым LLM API!