OmniModalLLM is a versatile and powerful multimodal language model designed to handle both text and image inputs, enabling sophisticated conversational AI applications similar to ChatGPT. Leveraging advanced architectures like Mixture of Experts (MoE) and Vector Quantized Variational Autoencoders (VQVAE), OmniModalLLM offers robust performance and adaptability across various tasks.
- Multimodal Support: Handles both text and image data seamlessly.
- Mixture of Experts (MoE): Enhances model performance by leveraging multiple specialized experts.
- Vector Quantized VAE (VQVAE): Efficiently tokenizes and reconstructs images.
- Dynamic Configuration: Adjusts model components dynamically based on input data.
- Chat API: Provides a ChatGPT-like conversational interface using FastAPI.
- Memory Optimizations: Implements techniques like gradient checkpointing and mixed precision training to prevent CUDA Out-Of-Memory (OOM) errors.
- Rate Limiting: Protects the API from abuse using
slowapi.
- Python 3.8 or higher
- Git
- CUDA-enabled GPU (optional, for training and inference acceleration)
git clone https://github.com/kirill670/OmniModalLLM.git
cd OmniModalLLMIt's recommended to use a virtual environment to manage dependencies.
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activatepip install --upgrade pip
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
pip install transformers datasets pillow fastapi uvicorn tiktoken einops tensorboard faiss-cpu slowapiNote: If you're using a TPU or CPU, adjust the PyTorch installation accordingly.
OmniModalLLM is pre-configured to train on the MS COCO dataset. Ensure you have sufficient computational resources before initiating training.
python main.pyThis command will:
- Load and preprocess the MS COCO dataset.
- Initialize the OmniModalLLM model and tokenizer.
- Start the training loop with mixed precision and gradient checkpointing.
- Save model checkpoints upon improvement.
- Launch the FastAPI server concurrently.
Training Parameters:
- Epochs: 5
- Batch Size: Adjusted based on available device (GPU, TPU, CPU)
- Learning Rate: 1e-4
- Early Stopping: Triggered after 3 epochs without improvement
The FastAPI server provides a /chat/ endpoint for interactive conversations. Once the training completes, the API server will be accessible at http://0.0.0.0:8000/chat/.
If you wish to run the API server without training, ensure the model is trained and load the saved checkpoint.
python main.py --load_checkpoint path_to_checkpoint.pth.tarGenerates a response based on the provided chat messages.
Request Body:
{
"session_id": "optional-session-id",
"messages": [
{
"role": "user",
"content": "Hello, how are you?"
}
]
}session_id(optional): Unique identifier to maintain conversation context across multiple requests. If not provided, a new session will be created.messages: List of message objects containing the role (user,assistant, orsystem) and the content.
Response:
{
"session_id": "unique-session-id",
"message": {
"role": "assistant",
"content": "I'm a model designed to assist you. How can I help today?"
}
}Initial Request (Start a New Session):
curl -X POST "http://localhost:8000/chat/" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user", "content": "Hello, how are you?"}
]
}'Subsequent Request (Continue the Conversation):
curl -X POST "http://localhost:8000/chat/" \
-H "Content-Type: application/json" \
-d '{
"session_id": "unique-session-id",
"messages": [
{"role": "user", "content": "Can you tell me a joke?"}
]
}'-
Create a New POST Request:
- URL:
http://localhost:8000/chat/
- URL:
-
Set Headers:
Content-Type:application/json
-
Set Body:
- Choose
rawandJSONformat. - Input the JSON payload as shown in the
curlexamples.
- Choose
-
Send the Request:
- Observe the assistant's reply in the response section.
Contributions are welcome! Please follow these steps:
- Fork the repository.
- Create a new branch (
git checkout -b feature/YourFeature). - Commit your changes (
git commit -m 'Add some feature'). - Push to the branch (
git push origin feature/YourFeature). - Open a Pull Request.
Please ensure your code adheres to the project's coding standards and includes appropriate tests.
This project is licensed under the MIT License.
OmniModalLLM — это универсальная и мощная мультимодальная языковая модель, разработанная для обработки как текстовых, так и изображенческих данных. Она позволяет создавать сложные приложения для разговорного ИИ, аналогичные ChatGPT. Используя передовые архитектуры, такие как Mixture of Experts (MoE) и Vector Quantized Variational Autoencoders (VQVAE), OmniModalLLM обеспечивает высокую производительность и адаптивность для различных задач.
- Мультимодальная поддержка: Бесшовно обрабатывает как текстовые, так и изображенческие данные.
- Mixture of Experts (MoE): Улучшает производительность модели за счет использования нескольких специализированных экспертов.
- Vector Quantized VAE (VQVAE): Эффективно токенизирует и восстанавливает изображения.
- Динамическая конфигурация: Настраивает компоненты модели динамически на основе входных данных.
- Чат API: Предоставляет интерфейс для разговоров, похожий на ChatGPT, используя FastAPI.
- Оптимизация памяти: Реализует такие методы, как градиентный чекпоинтинг и обучение с смешанной точностью, чтобы избежать ошибок Out-Of-Memory (OOM) на CUDA.
- Ограничение скорости запросов: Защищает API от злоупотреблений с помощью
slowapi.
- Python 3.8 или выше
- Git
- CUDA-совместимый GPU (опционально, для ускорения обучения и инференса)
git clone https://github.com/kirill670/OmniModalLLM.git
cd OmniModalLLMРекомендуется использовать виртуальное окружение для управления зависимостями.
python -m venv venv
source venv/bin/activate # В Windows: venv\Scripts\activatepip install --upgrade pip
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
pip install transformers datasets pillow fastapi uvicorn tiktoken einops tensorboard faiss-cpu slowapiПримечание: Если вы используете TPU или CPU, настройте установку PyTorch соответствующим образом.
OmniModalLLM преднастроена для обучения на датасете MS COCO. Убедитесь, что у вас есть достаточные вычислительные ресурсы перед началом обучения.
python main.pyЭта команда выполнит следующие действия:
- Загрузит и предварительно обработает датасет MS COCO.
- Инициализирует модель OmniModalLLM и токенизатор.
- Запустит цикл обучения с использованием смешанной точности и градиентного чекпоинтинга.
- Сохранит чекпоинты модели при улучшении результатов.
- Одновременно запустит сервер FastAPI.
Параметры обучения:
- Эпохи: 5
- Размер батча: Настраивается в зависимости от доступного устройства (GPU, TPU, CPU)
- Скорость обучения: 1e-4
- Ранняя остановка: Активируется после 3 эпох без улучшения
Сервер FastAPI предоставляет эндпоинт /chat/ для интерактивных разговоров. После завершения обучения API-сервер будет доступен по адресу http://0.0.0.0:8000/chat/.
Если вы хотите запустить API-сервер без обучения, убедитесь, что модель обучена и загрузите сохраненный чекпоинт.
python main.py --load_checkpoint path_to_checkpoint.pth.tarГенерирует ответ на основе предоставленных сообщений чата.
Тело запроса:
{
"session_id": "optional-session-id",
"messages": [
{
"role": "user",
"content": "Привет, как дела?"
}
]
}session_id(опционально): Уникальный идентификатор для поддержания контекста разговора между несколькими запросами. Если не предоставлен, будет создана новая сессия.messages: Список объектов сообщений, содержащих роль (user,assistantилиsystem) и содержимое.
Ответ:
{
"session_id": "unique-session-id",
"message": {
"role": "assistant",
"content": "Я модель, созданная для помощи вам. Чем могу помочь сегодня?"
}
}Начальный запрос (Создание новой сессии):
curl -X POST "http://localhost:8000/chat/" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user", "content": "Привет, как дела?"}
]
}'Ответ:
{
"session_id": "unique-session-id",
"message": {
"role": "assistant",
"content": "Я модель, созданная для помощи вам. Чем могу помочь сегодня?"
}
}Последующий запрос (Продолжение разговора):
curl -X POST "http://localhost:8000/chat/" \
-H "Content-Type: application/json" \
-d '{
"session_id": "unique-session-id",
"messages": [
{"role": "user", "content": "Расскажи анекдот."}
]
}'Ответ:
{
"session_id": "unique-session-id",
"message": {
"role": "assistant",
"content": "Почему пчёлы никогда не опаздывают? Потому что они всегда на улье!"
}
}-
Создайте новый POST-запрос:
- URL:
http://localhost:8000/chat/
- URL:
-
Установите заголовки:
Content-Type:application/json
-
Установите тело запроса:
- Выберите
rawи форматJSON. - Введите JSON-пейлоад, как показано в примерах
curl.
- Выберите
-
Отправьте запрос:
- Наблюдайте ответ ассистента в разделе ответа.
Для более интерактивного опыта рассмотрите возможность создания простого фронтенда с использованием таких фреймворков, как React, Vue или даже простого HTML/CSS/JavaScript. Этот фронтенд может взаимодействовать с бэкендом FastAPI через эндпоинт /chat/.
Вклады приветствуются! Пожалуйста, следуйте этим шагам:
- Форкните репозиторий.
- Создайте новую ветку (
git checkout -b feature/YourFeature). - Закоммитьте свои изменения (
git commit -m 'Добавить некоторую функцию'). - Запушьте в ветку (
git push origin feature/YourFeature). - Откройте Pull Request.
Пожалуйста, убедитесь, что ваш код соответствует стандартам кодирования проекта и включает соответствующие тесты.
Этот проект лицензирован под MIT License.
For further assistance, questions, or suggestions, please feel free to open an issue on the GitHub repository.