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

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

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

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

25 ответов

44 просмотра

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта