Зачем разработчики MLflow внедрили в этот MLOps-фреймворк инструмент оптимизации использования и управления различными провайдерами больших языковых моделей, чем он полезен и как использовать AI Gateway от Databricks.
Что такое MLflow AI Gateway и зачем это нужно
Напомним, MLflow от Databricks представляет собой платформу с открытым исходным кодом, которая помогает управлять сквозными конвейерами машинного обучения. Этот фреймворк не зависит от библиотеки и языка, поэтому может применяться с любыми ML-библиотеками и языками программирования. MLflow является полноценным MLOps-инструментом, поскольку реализует ключевые идеи этой концепции, направленной на устранение организационных и технических разрывов между разнопрофильными участниками процессов создания систем машинного обучения. Полноценную автоматизацию всего MLOps-цикла обеспечивают 4 модуля MLflow: Tracking, Project, Models и Registry, о которых мы рассказывали здесь. MLflow широко используется на практике как крупными корпорациями типа Databricks, Microsoft, Toyota, МТС, ВК, так и небольшими инженерными компаниями по всему миру.
Поскольку с распространением генеративных нейросетей в начале 2023 года средства ИИ стали активно использоваться в различных бизнес-приложениях и разработке собственных ML-решений, в MLflow 2.5. появился соответствующий инструмент. Сегодня большие языковые модели (LLM, Large Language Model) особенно часто применяются для анализа тональности высказываний и чат-ботов в реальном времени. Также вчера мы писали о возможности использования LLM при обработке данных. Однако, демократизация доступа к мощным SaaS-решениям и LLM с открытым исходным кодом чревата проблемами с безопасностью.
Например, чтобы организовать эффективное управление API-токенами SaaS LLM на предприятии, следует обеспечить безопасность пользователей, вставляющих токены API в виде обычного текста в сообщениях. Также возникают проблемы с затратами на общие ключи, приводящие к сбоям в работе приложений и пиковым затратам из-за злоупотребления ограничениями скорости. Наконец, каждая команда управляет своими собственными API-токенами без каких-либо ограничений, что мешает компании расширять доступ к провайдерам внешних LLM-продуктов, таким как OpenAI, Anthropic и прочие модели с открытым исходным кодом. Чтобы устранить эти проблемы, разработчики MLflow встроили в свой продукт возможность доступа к различным LLM через типовой интерфейс, назвав это решение шлюзом (Gateway).
MLflow AI Gateway — это высокомасштабируемый API-шлюз корпоративного уровня, который позволяет компаниям управлять своими LLM и делать их доступными для экспериментов и производственных сценариев. Функции AI Gateway включают централизованное управление учетными данными и развертываниями LLM, стандартизированные интерфейсы для общих задач, таких как чат и завершение работы, а также интеграцию с несколькими SaaS и LLM с открытым исходным кодом. С помощью AI-шлюза аналитики данных могут безопасно запрашивать LLM, специалисты по Data Science могут экспериментировать с различными LLM для создания высококачественных приложений, а MLOps-инженеры могут повторно использовать LLM в нескольких развертываниях.
Основным преимуществом MLflow AI Gateway является централизованное управление ключами API. Храня их в одном безопасном месте, можно улучшить безопасность, сводя к минимуму раскрытие конфиденциальных ключей API. Это также помогает предотвратить раскрытие этих ключей в коде или требование к конечным пользователям безопасного управления ключами. Гибкость и адаптивность шлюза позволяет определять маршруты и управлять ими путем обновления файла конфигурации. Это дает возможность включать в систему новых провайдеров LLM без необходимости внесения изменений в приложения, взаимодействующие со шлюзом.
AI Gateway обеспечивает такой централизованный доступ через маршруты. Маршрут представляет собой LLM от конкретного поставщика (например, Databricks/MosaicML, OpenAI, Anthropic или Hugging Face) и определяет связанные с ним учетные данные и конфигурации. Можно создать маршрут для каждого варианта использования LLM-решения и делегировать доступ отдельным потребителям, таким как аналитики данных, специалисты по Data Science и производственные приложения. Потребители могут запрашивать эти маршруты через стандартный интерфейс, но у них нет прямого доступа к учетным данным или конфигурациям, что обеспечивает защиту от утечки учетных данных и несанкционированного использования.
MLOps c MLflow AI Gateway: как это работает
Следующий фрагмент кода демонстрирует, как можно создать и запросить маршрут AI Gateway с помощью Python-клиента MLflow:
from mlflow.gateway import set_gateway_uri, create_route, query set_gateway_uri("databricks") # Create a Route for completions with OpenAI GPT-4 create_route( name="gpt-4-completions", route_type="llm/v1/completions", model={ "name": "gpt-4", "provider": "openai", "openai_config": { "openai_api_key": $OPENAI_API_KEY } } ) # Query the Route with a prompt gpt4_response = query( route="gpt-4-completions", data={"prompt": "What is MLflow?"} ) assert gpt4_response == { "candidates": [ { "text": "MLflow is an open-source platform for end-to-end ML...", "metadata": {"finish_reason": "stop"} } ], "metadata": { "input_tokens": 13, "output_tokens": 7, "total_tokens": 20, "model": "command", "route_type": "llm/v1/completions" } }
Поскольку каждая LLM-модель определяет свой собственный формат запроса-ответа, параметры и зависимости, AI Gateway упрощает работу с ними. Вместо того, чтобы требовать от потребителей установки специализированного ПО и знакомства с документацией API конкретного провайдера LLM-решения, MLflow AI Gateway предоставляет стандартный REST API для задач LLM, включая чат, завершение и внедрение. Каждый маршрут в AI Gateway имеет тип, например llm/v1/completions для завершения текста или llm/v1/chat для чата, который определяет формат запроса-ответа и параметры запроса. Этот формат единообразен для всех LLM от каждого провайдера, что позволяет работать с несколькими LLM. Следующий фрагмент кода демонстрирует подобное экспериментирование с использованием Python-клиента MLflow. Изменив всего одну строку, в коде можно запросить два маршрута завершения текста: один для OpenAI GPT-4, а другой для модели Cohere Command:
from mlflow.gateway import set_gateway_uri, create_route, query set_gateway_uri(gateway_uri="databricks") # Create a Route for Completions with Cohere create_route( name="cohere-completions", route_type="llm/v1/completions", data={ "name": "command", "provider": "cohere", "cohere_config": { "cohere_api_key": $COHERE_API_KEY } } ) # Query the OpenAI GPT-4 route (see previous section) and the Cohere Route openai_gpt4_response = query( route="gpt-4-completions", data={"prompt": "What is MLflow?", "temperature": 0.3, "max_tokens": 100} ) cohere_command_response = query( route="cohere-completions", # Only the route name changes data={"prompt": "What is MLflow?", "temperature": 0.3, "max_tokens": 100} )
Чтобы использовать MLflow AI Gateway, сперва надо установить эту службу на свой компьютер с помощью менеджера пакетов pip из PyPI или репозитория MLflow. Например, установка из PyPI выглядит так:
pip install ‘mlflow[gateway]’
Поскольку MLflow AI Gateway взаимодействует с API OpenAI, требуется ключ API, который можно создать на панели управления OpenAI. Получив ключ, его можно установить как переменную среды в своем терминале, используя команду export. Например,
export OPENAI_API_KEY=your_api_key
Это установит временную переменную среды на основе сеанса. При производственном развертывании рекомендуется хранить ключ API в файлах .bashrc или .zshrc, чтобы его не вводить его повторно при перезапуске системы.
Далее необходимо создать YAML-файл конфигурации шлюза, указав в нем маршруты, которые должна предоставлять служба MLflow AI Gateway. Этот файл надо сохранить в папке в системе, где будет работать сервер MLflow AI Gateway. Например, следующий файл с тремя маршрутами для OpenAI:
routes: - name: completions route_type: llm/v1/completions model: provider: openai name: gpt-3.5-turbo config: openai_api_key: $OPENAI_API_KEY - name: chat route_type: llm/v1/chat model: provider: openai name: gpt-3.5-turbo config: openai_api_key: $OPENAI_API_KEY - name: embeddings route_type: llm/v1/embeddings model: provider: openai name: text-embedding-ada-002 config: openai_api_key: $OPENAI_API_KEY
Далее можно запустить службу MLflow AI Gateway, используя команду start и указав путь к файлу конфигурации:
mlflow gateway start --config-path config.yaml --port {port} --host {host} --workers {worker count}
Если не указать хост, будет использоваться адрес локального хоста. Порт по умолчанию 5000, можно задать свой. По умолчанию количество рабочих процессов 2. Поскольку MLflow AI Gateway предоставляет интерактивную конечную точку документации API, которую можно использовать для изучения и тестирования открытых маршрутов, можно перейти к http://{host}:{port}/ или http://{host}:{port}/docs в браузере. Конечная точка документации позволяет напрямую взаимодействовать с маршрутами и отправлять фактические запросы к службам поставщика, щелкнув опцию «Попробовать сейчас» в записи определения конечной точки. Следующий пример показывает, как отправить запрос в чат с помощью клиентского Python-интерфейса Fluent API:
from mlflow.gateway import query, set_gateway_uri set_gateway_uri(gateway_uri="http://localhost:5000") response = query( "chat", {"messages": [{"role": "user", "content": "What is the best day of the week?"}]}, ) print(response)
MlflowGatewayClient— это клиентский API для взаимодействия пользователя с MLflow Gateway AI. Он абстрагирует HTTP-запросы к шлюзу с помощью простого и удобного в использовании API Python. Fluent API — это высокоуровневый интерфейс, который поддерживает однократную настройку URI шлюза и использование простых функций для взаимодействия с сервером AI Gateway.
На сегодня MLflow AI Gateway поддерживает следующих провайдеров LLM:
- openai для моделей, предлагаемых OpenAI , и интеграций Azure для Azure OpenAI и Azure OpenAI с AAD$
- Anthropic для моделей от Anthropic;
- cohere для моделей от Cohere.
Впрочем, постоянно добавляются новые LLM-провайдеры. При использовании MLflow AI Gateway важно помнить, что указанный провайдер должен поддерживаться службой. Иначе шлюз вернет ошибку при попытке направить запросы этому LLM-провайдеру.
Взаимодействие AI Gateway с моделями MLflow может осуществляться двумя способами:
- при использовании пользовательской модели PyFunc запрос можно отправить непосредственно к конечной точке AI Gateway и использовать в более широком контексте внутри модели. Данные могут дополняться, манипулироваться или использоваться в различных экспертных парадигмах.
- определить обслуживаемую модель MLflow непосредственно как маршрут внутри AI Gateway.
В заключение отметим, что необходимо обеспечить безопасный доступ к системе, в которой работает служба MLflow AI Gateway, чтобы защитить доступ к этим ключам. Для этого можно разместить MLflow AI Gateway за обратным прокси-сервером, который будет обрабатывать входящие запросы и пересылать их в шлюз, защищая приложение от прямого воздействия интернет-трафика. Например, можно использовать Nginx. Помимо обработки входящего трафика, Nginx также может обслуживать статические файлы и балансировать нагрузку, если запущено несколько экземпляров приложения. Чтобы обеспечить целостность и конфиденциальность данных между клиентом и сервером, можно включить HTTPS на обратном прокси-сервере и добавить аутентификацию перед запросами к MLflow AI Gateway: базовую аутентификацию HTTP, OAuth или любой другой метод.
Узнайте больше про использование MLOps-инструментов в системах аналитики больших данных и машинного обучения на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники