Этот проект демонстрирует полный цикл развертывания модели google/flan-t5-small с использованием KServe. Модель предварительно загружается и встраивается непосредственно в Docker-образ.
Примечание: Для развертывания модели в облаке Cloud.ru Evolution с использованием сервисов Artifact Registry и ML Inference Docker RUN, см. практическое руководство.
/
├── Dockerfile # Dockerfile для сборки образа
├── flan_t5_model.py # Реализация модели с использованием KServe
├── pyproject.toml # Файл зависимостей проекта
├── uv.lock # Блокировочный файл зависимостей
├── models/ # Папка с предварительно загруженной моделью (создается вручную)
│ └── flan-t5-small/ # Файлы модели google/flan-t5-small
├── README.md # Этот файл с инструкциями
└── LICENSE # Лицензия
Перед сборкой Docker-образа необходимо предварительно загрузить модель google/flan-t5-small и сохранить её в папку models/flan-t5-small.
Для этого выполните следующий Python-скрипт:
from transformers import T5ForConditionalGeneration, T5Tokenizer
# Загрузка модели и токенизатора
model = T5ForConditionalGeneration.from_pretrained("google/flan-t5-small")
tokenizer = T5Tokenizer.from_pretrained("google/flan-t5-small")
# Сохранение модели и токенизатора
model.save_pretrained("./models/flan-t5-small")
tokenizer.save_pretrained("./models/flan-t5-small")Вы можете скачать модель используя команду huggingface-cli:
hf download --local-dir ./models/flan-t5-small google/flan-t5-smallПосле подготовки модели можно собрать Docker-образ. Dockerfile использует двухстадийную сборку, при этом финальной стадией является prod, поэтому для создания финального образа можно не указывать таргет:
docker build -t kserve-flan-t5-small .При необходимости можно явно указать целевую стадию:
docker build -t kserve-flan-t5-small --target prod .После сборки образа можно запустить контейнер:
docker run -p 8080:8080 kserve-flan-t5-smallПо умолчанию сервис будет доступен по адресу http://localhost:8080.
После запуска контейнера модель будет доступна через REST API. Ниже приведены примеры запросов к API.
curl -X POST http://localhost:8080/v1/models/flan:predict \
-H "Content-Type: application/json" \
-d '{"instances": [{"text": "Translate to German: My name is Arthur"}]}'curl -X POST http://localhost:8080/v2/models/flan/infer \
-H "Content-Type: application/json" \
-d '{
"inputs": [{
"name": "input-0",
"shape": [1],
"datatype": "BYTES",
"data": ["Translate to German: My name is Arthur"]
}]
}'{
"predictions": ["Mein Name ist Arthur"]
}Проект использует следующие основные зависимости:
kserve- фреймворк для развертывания моделей машинного обученияtransformers- библиотека Hugging Face для работы с моделями трансформеровsentencepiece- библиотека для токенизации текстаtorch- фреймворк PyTorch для глубокого обучения
Полный список зависимостей можно найти в файле pyproject.toml.
Реализация модели находится в файле flan_t5_model.py. Она включает:
- Класс
FlanT5Model, наследующийся отModelиз KServe - Метод
load()для загрузки модели и токенизатора - Метод
preprocess()для обработки входных данных - Метод
predict()для выполнения инференса модели