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).
- Создает экземпляр приложения FastAPI.
- Определяет маршрут (
/llama
) для API. Когда к этой конечной точке отправляется запрос GET, он выполняет функциюllama
. - Внутри функции
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!