170 похожих чатов

Подскажите, пожалуйста, кто как деплоит модели на CPU, чтобы они

использовали все доступные ядра (идея чтобы на кажом ядре сидела копия модели и как следствие увеличить throughput)?

Пробовала через FastAPI и workers, но результат маленький.

25 ответов

12 просмотров

Golang можно использовать.

Майя- Автор вопроса
Aigiz K
Golang можно использовать.

А у меня модели оптимизированные (onnx_runtime). Go вроде не поддерживает пока их достаточно хорошо. У меня transformers модели (по типу BERTa)

Майя
А у меня модели оптимизированные (onnx_runtime). ...

Горутина может запускать питон как шелл

Майя
А у меня модели оптимизированные (onnx_runtime). ...

А сейчас инференс в одном потоке происходит? Вроде она сама должна параллелить вычисления

Хотел написать, но понял что много и стало лень. Спросил у gpt-то что хотел написать 😁- Если вам нужно распараллелить процессы и эффективно использовать все доступные ядра CPU для деплоя моделей, есть несколько подходов: 1️⃣ Многопоточность (Multithreading): Вы можете использовать многопоточные библиотеки, такие как threading в Python, каждый из которых будет обслуживать запросы на основе вашей модели. При правильной реализации это позволит использовать все доступные ядра CPU. 2️⃣ Многопроцессорность (Multiprocessing): Вместо использования потоков, вы можете рассмотреть использование многопроцессорности, где каждый процесс будет выполняться на отдельном ядре CPU. Для этого вы можете использовать модуль multiprocessing в Python. Каждый процесс будет содержать копию вашей модели и обрабатывать запросы параллельно, увеличивая пропускную способность. 3️⃣ Контейнеризация: Вы можете использовать платформы контейнеризации, такие как Docker или Kubernetes, для масштабирования вашего деплоя моделей. Они позволяют запускать несколько контейнеров, каждый из которых содержит копию модели, и автоматически масштабировать количество контейнеров в зависимости от нагрузки или доступных ресурсов. 4️⃣ Использование библиотек и фреймворков: Некоторые библиотеки и фреймворки для глубокого обучения уже имеют встроенную поддержку для многопоточности и многопроцессорности. Например, TensorFlow и PyTorch предлагают специальные инструменты для многопоточного или многопроцессорного выполнения.

Майя- Автор вопроса
Sergey
Хотел написать, но понял что много и стало лень. С...

Ну GPT как всегда выдаёт максимально общие ответы. Мне было интересно, как более опытные люди в реальной жизни на своих проектах делают с transformers моделями, чтобы не пробовать все возможные варианты.

Майя
Ну GPT как всегда выдаёт максимально общие ответы....

https://youtu.be/ROE9PG8YaWA тут есть секция про практику ускорения на видюхах и в презе разные ссылки прлезные есть, с которыми можно ознакомиться и узнать что-то полезное https://m.youtube.com/watch?v=d8ACZ0nQzss тут другая практика, но тоже скорее про видюхи https://m.youtube.com/watch?v=UeTDHVZ3Ft0 тут первый же доклад про процессоры, но не про трансформеры

Майя
Ну GPT как всегда выдаёт максимально общие ответы....

Так там же подробно наоборот-докером можно распараллелить, библиотеку использовать многопоточную, готовые фрейворки-кому что нравится.

Майя
А у меня модели оптимизированные (onnx_runtime). ...

Тут идея в том, чтобы модели работали на питоне, как обычно, но ими рулил оркестратор на go (или ещё каком языке, который нормально с concurrency работает). Если просто на FastAPI или serving каком-нибудь, тогда отдельно надо решать задачи: (1) timeouts (2) model pool management - warming, recycling (3) просто следить, чтобы большая пачка параллельных запросов не завесила всю систему нафиг, а встала в очередь (4) request batching, чтобы ресурсы эффективнее использовать (5) логгирование и телеметрия запросов, чтобы видеть состояние

Rinat Abdullin
Тут идея в том, чтобы модели работали на питоне, к...

Кстати, как решали задачу синхронного инференса в асинхронном фреймворке?

Futorio Franklin
Кстати, как решали задачу синхронного инференса в ...

inference и вся ML логика на python. никакого асинхрона там, для простоты и надежности. оркестратор - полностью асинхронный. Чисто на go. Но, там без бизнес логики. Он просто рулит пулом из питоновских моделей/процессов и распределяет между ними ресурсы.

Rinat Abdullin
inference и вся ML логика на python. никакого асин...

То есть запрос -> fast api -> http -> пулл -> модель ?

Futorio Franklin
То есть запрос -> fast api -> http -> пулл -> моде...

HTTP Запрос -> API оркестратора (async) ---> python process (sync) Общение между оркестратором и моделями в пуле - просто по STDIN/STDOUT. Он же сам их запустил, может с ними напрямую общаться. Так и отлаживать проще модели индивидуально.

А с воркерами что не так? Воркер гуникорна (скорее всего его используете) это и есть отдельный процесс на отдельном ядре

Майя- Автор вопроса

Да, его и попробовала. Но у меня 10 ядер на компьютере. Поставила 4 worker-а и разница - стало процентов на 15% быстрее (запросы слала асинхронно, сразу 64 и тестировала вариант с 1 worker-ом и с 4. Разница 15%).

Майя- Автор вопроса
Майя
Да, его и попробовала. Но у меня 10 ядер на компь...

Ощущение, что это как-то странно. Если бы модель распаралелиравалась на все ядра сама - то ускорения не должно было бы быть вообще. А вот если её worker-ами на ядра распарраллелить, то должно было стать в 4 раза быстрее, а не на 10-15%.

Майя
Да, его и попробовала. Но у меня 10 ядер на компь...

Исходная модель была переведена в инференс в однопоточном режиме? Если запускать несколько многопоточных моделей, то они будут конкурировать за ресурсы

https://docs.ray.io/en/latest/serve/index.html Все из коробки есть. Хороший hands-on туториал https://medium.com/distributed-computing-with-ray/how-to-scale-up-your-fastapi-application-using-ray-serve-c9a7b69e786

Игорь Тарлинский
https://docs.ray.io/en/latest/serve/index.html Вс...

Потом, если надо и обернете в куб. (я лично не пробовал интегрировать, но ребята интегрировали успешно)

Майя- Автор вопроса
Игорь Тарлинский
https://docs.ray.io/en/latest/serve/index.html Вс...

А вот это я как раз уже пробовала! Могу даже опытом поделиться. Существенно замедлило модель, очень существенно. Писала им в чат - сказали, что это нормально, т.к. рассчитано на кластер.

torch сам умеет, лучше собирайте запросы в batch

Майя- Автор вопроса
Aleksandr
torch сам умеет, лучше собирайте запросы в batch

На CPU вроде не должно быть разницы - батч/не батч. На GPU собирала. А на CPU смысла нет вроде

Майя
А вот это я как раз уже пробовала! Могу даже опыт...

А какую модель деплоили и какие указали параметры batch_size | num_replicas | num_cpu_per_replica | num_gpu_per_replica, если не секрет, разумеется?

Майя- Автор вопроса
Игорь Тарлинский
А какую модель деплоили и какие указали параметры ...

Примерно как на скринах, на 1 компьютере Ray даёт серьезное замедление по сравнению с просто FastAPI

Похожие вопросы

Обсуждают сегодня

Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Hi guys, I'm looking for a good LLM course. Is there any course to learn LLMs in advanced? I'm aiming to use them in my apps, so a perfect course in my openion, is not only a ...
Taha
14
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
Всем привет. Подскажите, пожалуйста, как вы реализовываете следующий функционал. Допустим есть форма, в которой имеется выпадающий список со значениями. Значения хранятся в БД...
Евгений
7
Хех, данные на форме всегда будут "из прошлого", т.к. перезаполнять поля формы в процессе редактирования пользователем - так себе идея. Пользователь может открыть форму редакт...
Alexander Somov
7
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
31
Карта сайта