Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Wpis użytkownika redve w Hydepark

Fanatyk

w Hydepark

4piorunów


Mam sobie taką lambdę która jest mocno używana, ale jej cold start zajmuje 50s, przez co api gateway nie pozwala go wykonać (bo wywala timeout po 30s, i nie moge go zmienić z tego co czytałem).
W związku z tym, chciałem jej dać provisioned concurrency, żeby zawsze była aktywna.

Czy wg tej konfiguracji, ta funkcja będzie aktywna 24/7 i może ogarnąć do 10 requestów naraz?
Wg. kalkulatora to ma kosztować prawie 150$ na miesiąc więc to zmniejszyłem do 1, ale pytam czy dobrze rozumiem co robie XD

Komentarze (20)

Fanatyk1piorunów

@redve - Nie napisałeś nic o ustawieniach Lambdy jak CPU oraz jej timeout.
CPU skaluje się wprost proporcjonalnie do ustawienia pamięci:
>Function memory allocation
>128 MB to 10,240 MB, in 1-MB increments.
>Note: Lambda allocates CPU power in proportion to the amount of memory configured. You can increase or decrease the memory and CPU power allocated to your function using the Memory (MB) setting. At 1,769 MB, a function has the equivalent of one vCPU.
Maksymalny timeout dla funkcji lambda jaki możesz ustawić to 15 minut:
>Function timeout
>900 seconds (15 minutes)
Do tego funkcja w kontenerze zmieści więcej (w porównaniu do całkowitych 250 MB standardowej lambdy):
>Container image code package size
>10 GB (maximum uncompressed image size, including all layers)
Pokombinuj z tymi ustawieniami by wszystko działało jak należy.
Źródło: https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html

Do tego Python 3.12 i wyższy wspiera SnapStart - ale obrazy kontenera nie są wspierane: https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html

A tu masz trzyczęściowy poradnik jak ustawić Lambdę by zminimalizować Cold Start:

1. https://aws.amazon.com/blogs/compute/operating-lambda-performance-optimization-part-1/
2. https://aws.amazon.com/blogs/compute/operating-lambda-performance-optimization-part-2/
3. https://aws.amazon.com/blogs/compute/operating-lambda-performance-optimization-part-3/

Lambda quotas - AWS LambdaMaximum sizes, limits, and quotas for Lambda functions and API requests.Amazon
Fanatyk1piorunów

@ostrynacienkim @pierdonauta_kosmolony kod w pythonie który wczytuje biblioteke pytorch (jakies 600mb) a potem model pytorch (model ma jakieś 350mb)
jak sie wczyta to jest ok, ale wczytywanie długo trwa

Gruba ryba0piorunów

@koszotorobur zgadzam sie, propnuje nowa komitywe utworzyc czy tez spolecznosc (jak nie ma ;D)

Fanatyk1piorunów

@ostrynacienkim - najważniejsze jest by brać udział w dyskusji a nie się z niej wycofywać bo ktoś coś tam już napisał - bo tu na Hejto nie ma za dużo technicznych osób - a jak są to się nie udzielają - a miło sobie tak na techniczne tematy podyskutować :smiley:

Gruba ryba1piorunów

@koszotorobur a to tero rozumim, to jak cos tez moge pomoc nie ma problemu, ale skoro sie znacie to zostawie pola dla Ciebie skoro ogarniasz chmurke :smiley:

Fanatyk2piorunów

@ostrynacienkim - Hejto to jedyne miejsce gdzie pomagam za darmo - poza tym Op to dobry ziomeczek, dopiero na starcie swojej kariery - niech się więc zdrowo rozwija :grinning:
Poza tym sam musi też pokombinować co jest możliwe a co nie bo nawet nie wszystko wynika wprost z dokumentacji lub można przeoczyć. Niemniej jak to z AWSem... oferują wiele usług (i tylko coraz więcej), którymi można osiągnąć ten sam cel - tylko różnym kosztem - więc staram się naświetlić OPowi, że są w AWSie też inne opcje - ale czy tańsze dla jego zastosowania to już będzie musiał sprawić sam 😉

Gruba ryba1piorunów

@koszotorobur ja sie nie wgryzalem w temat to nie moj projekt i nie ma fakturki na koniec 😉 Co do ASG i EC2 to mozna i uzyc spot instancji bedzie jeszcze taniej. Warm poole i snap starty tez spoczko (wdzie ze dodali w koncu pajtona), ino spap start:

SnapStart does not support provisioned concurrency, Amazon Elastic File System (Amazon EFS), or ephemeral storage greater than 512 MB.

a op pisal ze uzywa efs'a i wlasnie provisioned concurrency

edit: poza tym polecam to awsowe Q jest calkiem dobre jako wyszukiwarka w ich doksach bo do niczego innego sie nie nadaje 😛

Fanatyk1piorunów

@ostrynacienkim - zamiast Lambdy czy ECS można po prostu sobie ustawić prostą Auto Scaling Group, która uruchamia instancję tylko na czas wykonywania obliczeń.
Do tego jeśli OPowi zależy na krótkim czasie startu aplikacji to może sobie użyć Warm Pools: https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-warm-pools.html - ale to już kosztuje dodatkowe pieniążki.

Decrease latency for applications with long boot times using warm pools - Amazon EC2 Auto ScalingDecrease latency for applications with long boot times using warm pools without having to over provision your Auto Scaling groups.Amazon
Gruba ryba0piorunów

@redve zmiesci jakk uzyjesz lambdy dokerowej - patrz zamieszczony link. Co do ECS... koniecc koncow to Twoj projekt, budzet, mozliwosci i ograniczenia, chcialem pomoc 😉

Fanatyk0piorunów

@ostrynacienkim libka i model są na EFS, bo lambda za chiny ich nie zmieści.
To co wrzuciłeś, wymaga dodatkowego bulenia za ECR. Ten cold start nie jest wcale aż takim problemem

Gruba ryba1piorunów

@redve ta biblioteka jest gdzie? w layerze czy masz ja obok w kodzie lambdy? Tu masz przyklad od AWS. Generalnie polecam przy takich libkach uzywac lambdy z dockera - https://aws.amazon.com/blogs/machine-learning/using-container-images-to-run-pytorch-models-in-aws-lambda/ ale Twoj trop z provisioned concurrency jest w sumie ok

edit: a tak po prawdzie wsadzilbym to w jakis kontener na ECS ale koszty rosna bo API GW nie gada z ECS bezposrednio i potrzeba innych resorce'ow

Using container images to run PyTorch models in AWS Lambda | Amazon Web ServicesJuly 2024: This post was reviewed for accuracy. PyTorch is an open-source machine learning (ML) library widely used to develop neural networks and ML models. Those models are usually trained on multiple GPU instances to speed up training, resulting in expensive training time and model sizes up to a few gigabytes. After they’re trained, these […]Amazon Web Services
Gruba ryba1piorunów

@redve
Przydałoby się coś w stylu snapshotu pamięci, jak mają VM-y, tudzież jak działają zygoty procesów w Androidzie.
Może zamiast lambdy działającej i tak w kółko opłacalniejszy byłby kontener fargate?

Gruba ryba1piorunów

@redve 50 sekund cold start ??? Co to za potwor? Jaki jezyk programowania? Java, C ? Lambda jest w VPC? Włącz se X-Ray coś jetsy bardzo bardzo nie tak

Gruba ryba0piorunów

Provisioned concurrency=10 oznacza 10 aktywnych jednocześnie środowisk uruchomieniowych. Jeśli jeden request wykonuje się 1ms to wtedy przy concurrency=10 masz 10000 requestów na sekundę

GURU0piorunów

@redve nie możesz normalnie bukwami i w rublach podawać?
nic nie rozumiem

Fanatyk2piorunów

@skorpion - wszytko już OPowi wyjaśniłem w swoich komentarzach - nawet taki lajkonik ja Ty zrozumie :stuck_out_tongue_winking_eye: