From c167c69c09a032ead33316d70cd1e9efa4be1866 Mon Sep 17 00:00:00 2001 From: MathieuBsqt Date: Tue, 7 Oct 2025 17:16:42 +0200 Subject: [PATCH 1/4] update scaling strategy guide --- .../guide.en-gb.md | 185 ++++++++++++++---- .../images/set-autoscaling.png | Bin 0 -> 170060 bytes .../images/set-static-scaling.png | Bin 0 -> 129709 bytes 3 files changed, 145 insertions(+), 40 deletions(-) create mode 100644 pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/images/set-autoscaling.png create mode 100644 pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/images/set-static-scaling.png diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md index 0e9245d3044..27d4568f91d 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md @@ -1,78 +1,185 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-07 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: + +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +## Static Scaling -### Static scaling +### What is Static Scaling? -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> - -**When to choose static scaling?** +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +### When to Choose Static Scaling -### Autoscaling +- You have **predictable, consistent workload**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -With the autoscaling strategy, you can play on several parameters. +### Setting Static Scaling (UI and CLI) -#### Minimum and maximum number of replicas +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 +>> -- +>> ``` +>> -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +## Autoscaling -#### Monitored metric +### What is Autoscaling? -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -#### Trigger threshold +### Autoscaling Key Configuration Parameters -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. +Using this strategy, it is possible to choose: -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|---------------------------|-----------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | -> [!primary] -> -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. +> [!primary] > -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. Specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where in the API response payload the metric value is located. This value is format specific. See valueLocation from parameter list in [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | + +> [!example] +> Scaling based on a custom metric from an internal endpoint: +> +> ```bash +> ovhai app run /: \ +> --auto-custom-api-url http://:6000/metrics \ +> --auto-custom-value-location foo.bar \ +> --auto-custom-target-value 42 \ +> --auto-custom-metric-format JSON +> ``` -- You can use autoscaling if you have irregular or sawtooth inference loads. + +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example -We will use the following example: +We will use the following example: In case an app is based on the `AI1-1-CPU` flavor with a resource size of 2 (i.e. **2 CPUs**), this means that each replica of the application will be entitled to **2 vCores** and **8GiB RAM**. @@ -94,13 +201,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> Total deployment price for **autoscaling apps** are calculated based on the **minimum number of replicas**, **but** cost can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/images/set-autoscaling.png b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/images/set-autoscaling.png new file mode 100644 index 0000000000000000000000000000000000000000..c1b314575c4f1ccf75cc50da0e6107f7f5ff1f3a GIT binary patch literal 170060 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�Bm1YGlMoF?ex32EQYCTJ)AVR? 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­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

>fw~?R2AUoyLK~B}zV&g;RZf37-(qGu{j=@j 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 p3ngND421sQtrEz>me&68^sXPtdjOSvkXP$XZ zpYEzIZL6*cm5~yGgTa6S0s?{)6BU#L0s^Z60s_W`f_SfymFJNM0{XyhDj*;uCLn+( zV`pt-YGDWjBpRBi45=bNjGCn$7sG1;3|0`Z28KumTo5n`B6`NmkA# zsvy`CR24?50$fYzggUT>1`9LNs!~H?Eyugyx$D0Fw72&5YQM*0Jf5iz0ThXh6-$aX z2Zkq|LK6iCokLPwFfGOf1dNUcD(Pd}jD*O*&JMzh$@#Xrw(7GsS;an5|GM<1Eg3$P zYy-@jhcC4+*6jKb7YL|&E3E$k=%Zo#z^q5?hdv00ep3PJ zQY0eGR{?hc2`qhzKqo#N7xbC*S(dOW0Nfnn8qaCZ7NifK*^gBv1@lwx&I|)sk44BP z3?D4`!--4C4Zc=?GS~o_Cvzyt5V?LX+$TL$`QhyCkX>8DS{zY(q!jU&1yzqmIb3;~ zkuYh$6p&g&UpzV_J;#ttA~xGi@oYLF)rxO?xV4N*NnOPKwH~^nKK!^8-#$VPk-tb> z68T>ZFdITI#)`Mo@KA6o$l_Kcj>hgI?E7i%!KOm{vwMiy^>1jnJa^*_tkha{(&9^% zUhyU1ek?~1mltfA68B!o$i^ht9>aG^1oV>)ZG}GA@R46%e312WXeW?vCrw92t^5Y5 z4Nm|B3kJd-)0+hU+1~=sJb%!6{ZsXY`%k@7G zvB{hiYvvN8m422_(&rL+JL*VOJQuu@Tq^Y3pVEvVtJ&UH+pEEkY>~1b%ucpM|E9CukBn@`26kOwv?hQWK?(duc$j$5HJvg(o#LG*^IPJhcJU)hu+EXApS{ zx0&g0kU-o+kPr~?-ut~#pfwAi+^@l%_KhFz4`skNR`9D7G;%g%2ci?I_z2k#u8Y?x`Vq;upMXphBQ6vQ zk>RH9CR7@Ef}UgPi|~5IjCf?3E~_9j0r@HC}bBG-*&-E_(@`S!9&pCsJfMk?kpH zlh5qnRQzZ;5>qhs7^{KIIV4lz2aff~p1!yGK=K3Ev<%-7^>rvIVI&6VY3Z0@DSAd~ z%_`u{gYF*4=R@PBF~V?!LFEKjoLBP0`2v2J>u9uT0fV zi%m7z1+g))8>JehO2@4-oie#KEj5)_1y}i3#aHuNGu=|M8gSHUl&w?OxH~Z2vV%S$ z=)-R#sB>0WEhg%o-2@*$9ber@Tp!<5AA8g1V1j+xL9d`SVQjVz!Cb~1M3-V((Q#R> zac&;BIon*>B<{O|>(URvSi&5@kYribn>CuXw$Q`Uqomg|_ZVqj5S-{=C;DNKI7}Ch zBcE1UUE1xCcxXGb@1V&ZpCwV9(=`3`J>on6Sb6`i~TnlnI7vmM&|)S{)Sw zm5Mr(+Jmo*4Or%EeRcDfQ7B7cx`~DjgGUu}?&g@sM8|>ik@Ks}kIWY71nFw&?u`oS zJU_@9=NcDILYzLdVYS^jCI6IlXL+K05`U6_FY#~l@7C=Q7=r4Bnn3JDoFlYiFJq&} zhQ%_+#$`Wb6Ji~+H*;`fo3=AJ`i4R{5%s)xvX^n(KKF1+`cqane=pJu=Vp0eE$~?G z(9V+4(c%1HDL-Af%g)hex6R6?V^`Q7^SE)ca^PoqTX5TA$9Tt3-!$P^{>b)cfndZj zm0s3;vGWh-89!b7ukw@Ilsgx=tGn8VU#VU-D;h7 z_IX{3hk++byJ4Ns8`eAPjrq;^3x^T2J=&F_kG&7;hEBJ85}NtvV?jJrbR-p|MVtcc zgpc*q2YfZIHbypzeja|0&NCsA@)mIf`T+k#fn_7IsFDws5=IH^4}@AILa zplk)NR2(c87Zdf*gw%v!2r=_{0UTzAvo9v;2V_&h`XO{vbcuA*`XU44AzYXu;pu=T zhEq)s-sigeHt0s^>3}4`$o`8^rqHu^kob`}_IQ!c6JI)0^il{!O~r`|KNnd^{KQ3L zw7O}oy0F>~A6ie*VaT=VeFzOgwkN^KET9WzF!jd3ry{d7UPhAw6sOH(k4sgHpKaGQ zn>W+AytXU0<8&f)MZ8h=k>pe6bIg#~8yZO`X)C!ZRr?UDkhmmbr*+Uhc}gja-)8u( z6s$aQCbrkN3-DX&M%6gh4e#_0V-rBi)|S|ZEhNmzKlX2KSt1G2^GzpIgL?1$C}^D4 zE`f@8WGHp%D^(gZ&Wy8 zmTF1o-g8pLhHvlmz3}^3>eCbFzN_KY+PHMudV9A^PX>6jH}pecqe_R0hKGIbU2kOg zxsadG&u|eMt+so0=;|H*QhQU^!(`$WVl*%88}or`Pzi>lMjCtVMqM`B7Mq7i6fX*= z1k*&6L@q5hC&NDS$Fev@Yh`IQ&(4(wk8O+*jKj3?u#m8#h9vXk>X$ld^VORXpOHuM z{IUVXvxTd9?WK*bT&w(x!Rg3sW@zTsWvsfE+~w9*4_I4?o}^-RQ{#pWCYAM##tZkF$Y zJvX1!ZW(SDuxr?59Alhn3V=;h<|h|Y<`$O{re|$QPh=#%I$!nlNd-6I(s9VSD%>5^ z=_lyJM!{jxu&;UZJLKIN>ylAt#G~1YCSXf-3){1Ul zvnAXdtW4jwc3Rt7J?hMKf11nmEXNIN1}`U8rZ0ibcYa zF>D|9`!}2!*f%RHkQ!r(6)!%|$O|ArdEk&cu!Dms0ZW_e&+Ez~5m0x)>3*F>`-T4A z`e9uA2(E7)5cG=5=T{HfNgN)8!XYh4?+1z`LlrS2Nl75`_c9a^I4}|r=z9tH{R;$) z0R;X>83;%m81uhnIbhQNz<>Y&1)Bna{Rc+v{rT$?^Zt9s{?8LME(i$n{p}a6fEsQOzaI{OfcWGE#Khj8^7?j$hF10_)(*yq0p0Hv&^Dr~_CP?W#J_&PVsb?1 zKtLdirV1(!Dw1E=^{p+bbq%cb45?i#ZQh}QfH+;)-;0)p4!U?QmKIj_>@Hjce?YLm zmw#2$5a9g*;$Y52pdu-QCtz)7h{sG#OHE6_4TFb=$7yF^#4aZ&{2%o9H!cDb2L~H= z8X9M3XKH5#YHK@V8ag&MHX2%b8hU!FcL*wbS1Siy7b+`z!aqCts~griLI&cvX{37(<&!2o6x|sftl9l~`#CjKy=2r_19W^b@{|n8*)ad^}`_=L% z+8=WLNsjYZXY4YjE`}B=f~J=5s(xpUo1TT9p7Ren|7!Xlr+=a<+8f#lSX;hhI&lBb zSpPx(d*knjf6!F@A5CVae~|oJ%il16$-pjWXm4%d_)CY1R;CWz?`Z$8>ff{2m3-C!Mq>rXzOW?xwn!6Ew{F(p;FcOre8>B24AI_pI zB8q1tB#hp+Dh@WHU@QTIAFmHD>0!qmd+Kn)mov}3%7%%I;jx$iMm%3{66aGkr6}=L8p8#<9*!as@+)H5BqdquQ)!erqlsam$ zW!Yqh+CvmIHOKZ#lIm&^Lqp=YxVVyzfYyrz z-!C+bz~;EdjXxm#YkN#eDurkzSBZ46p=Lb+uJ^&7ps{^4ha2Me%|~3#N@`|=Hj7{& zFMxlYG zIxTMNon}q_g^~;#&exZ0x;eE@qLm9Y~ z#Vz3X?b9@vFr6j4PAAd7t5SGFp8!vyA}I-#B~#`HB+{4eWk}*s6&TBF?|3dFdj38s zTd9?f{M&_hPn2f&4bzPD$Z@h6(Y)*1KtHMR&v zZ@kq|8=oT8=H=%jm{jP2%tL1AL~4e^97(o60!g7-f^nOI_4fKlt6q#GuduVTXZYNR zaj?we{?lJ|z@j`s9&0suT1R(7l}Mj+bly8c)N6;RL;b^ILm0rGA5-S$YMtgQI{xXH z8#8>o`Y5XUhmLqX38|pD2Bv>vkotl?k+KSN7?1sn>lBjr?&-W?Dnb9*)&B-NEeL@Q zs)`f#zb*Hd17Xd9ed%T|la6K@|JT_4@8khS*#_|!!oRzUG6VUngFRO~gkk)z+2+5l z0+OWp|HGvS)BA)Ibu^bb@KYG6TX+F>@A~%P%gP;CSs1zT= zh2N&bzjf6uE7=WJk^gwDvi*Mx`=z_i{BJz{#_dMQ=XaCHdb(BE{@*6~th2=QU)BCg z={5?#Ce{*eu6fp9zSTV?of9s3a&!da;(2YU^x_4zavQzW_WKAKV)mWXZ+jThI%evJ zc|=ctv0Zqhb9yN$T^{d|wI{E@7xD4w&&$E%p1X#D>I~W00*S&69g7;5a&U6F2?_vf zD^rvf5h3yOZ|E{sj}pvO3i_P_F3r1%;QhM1HqK5Go;M=r{QR8};v6(CFj#G$uRAyP z;h>@I3`tiz2UWb(lo5{4%Vozf>iKRCTzI+It6abv%AJ?6M}|HkVVorP%!;F_DAWEZ z!XYax4?go!?RXlxAZ+dT`}EA{Ygn4?`$SnrQUX7Rg0A8EJ;$lMy}M?@4rCglQPuT@ z*|g2s>t{K{!un|$$T6Baw$k0KNSCA+o0pciwqx^EPe`}Eucb`d+CDF+hi%>ah*SjO z+Ct&LyC})61=r2R4+(?W_q5-sw(RO;F`^tWXPC$1pa9lxIb;z1648@XDdci=$R;Wk zHHgOTO&%A&<-+3>Zaze=W8U<;O1R#K&Jkbj8yqwiVr-A7XoQWQu!KFNS(!Q)ae!*P zJOLsOqTgT;^X#Qd4lm&a2|YRB;$jm}&7QfK+g?e9?HKZpQEk>kl5 z1rD!|bTkYYU5Nx;zz?dyNRyTZ-DZsvD_>@>Ndv@l2)B>OZwtrLrvaE~gI+;xJr&6d z$cW}CMTtL^g+j$n5GG=es*SQ0tvxue1_ImkQ4Gf@{r6+`gT9M&?vzGQIkA7WSwZVQP~yIbJ3{pL&x)IDo@UJ?S$X z<0(7(i}mE$qK{F|M&cXd0xE4TzF7-%H8M!KDn_}~BJ7|i#V(Ik!xox5ovUzZ17hU9 zx{Ujg!Gq_!Nx+5v+_JsNBpGNR!5a3jBXa>~!!PylU)JnVhS9T=cgr(q`&EOTJG%`Gs%O&1lSXILbdM-t+o)n4Yk=)bQ1=IDVKZe z6*(PXjPQ@duqr6lU#jJl44%3wgXB}9`{t+k2y*6M%D(H~1tw}=35J{&AAFE77>y(P!=)1dy=jj;?mw7~FfrpoyUhT!LE zjItKk;&m4sB>8yRW>XH-uI3;DrG&2^VdBpfmqF_5w|mbt!oPcY%CouM5iS~?vrK>SK`c7X)-}!9;4z{5l_Li$+X>W5&a@9Wa*?aR%* zZJ;Wxrc@F2UM9XV~mQA28(5lsPGGtnQ-{`f2oi%g^G3kUI6(MdsOt$hEAj z%vf6-Zj4n_q(bfJ2s3nMr8~c-xxlK4jJ$zUVbrhv`oX-^q;C;6n9zBV7y$fZa=zEe zp^?Fw36--eWR?vm3SnSan>BI238Ce*e`R0U1Q2P97Rk4E4qQUI7O47`5{zgJ*B=9o zmY-V$&rm!rkgY3*?!2sOWz*@lMsAVb1!~$SPiHh@khOqbk<#$t!F+U>Dr0L-DQiI% zo$Zhy%b$^Pj%j0Tf9>CHd98enw~fMO;D~0CEgdZhwK2n*HldXlhDF4M5o& z9~3Q%CoV~ujg-8qw|79@_AXOG_DNfkYfG_smgF@#rk>*@$%2^lu(0k9m5BRc2C1Q= zycPSW2P$cFZ$i9??(-rabypGXqv6BA!&BSn?a};2x7}TZxAT+J{#UBsH>uq4?>jb6 zAjil^0=B~H!e%IAZF_L3wj&rRgaXofOOB-PouFd__4i^SJ*o>Dp&30dH9M7eq&gi! z;RX05rJDeOz$8?Ur`ogaW_f8_dDtIpmQ;i^n9<&E_+SIX@+B~NP&1(cJEF#LOb)#O z4VSB%j6Af!j86=;haK*dN*IyI)fmCyU5~^>#)Ueoe#9wH-zjmT`%|uhx2LPu1MU-u z>KTW7kMY}Yk{1x;mx2it>8Kypm{RNphyl)WnI^O2MwvFROD;QI-r>IakDHh3Rt2K+ zL4J`BB{{r_NtxkS)~!+UcX_JweSn(zjS89?Z-L92^M)oeofjl|>bFlp*^IG%@+dQ0 zp)5G9DBBYmVKdzBY$GPVj90a#=$uI}&4+IDp9aai@T1gC&}CHlV~?!AA|{{=mHKYh zr;ZHmNR0QS$V>M|!KtIOgwN~LTAAr{RrU#IxG+;UKR~d2gwJ&;;j?i8RE{?$>-0@$ z=TwwHxfa6{`eP!d3m&u3Pv+b-JZT$0mD@fWR}G1wX$b63x&1 zX>bIWTCrC;p#-9FBQG-zvF^D8Tqj-;q}n$mGhAL%7dxGh!7GMnA9pCe?YbqPoc2a^ zeedzHhitwopby6Cg1Q^;0(d^I`q*3FwFe^K{PdyRs>{JRl{#Eo$%=i(2cXW!4|Zg zm88|Bvp7Navplh+ICWDvKKBem3(We9i<75Te{66BEael>dZ=jc7!7dLlPk zQaJIaP%1Of$I(WZ>gf|?G9~itGAGEFaalWNeN#|X94hVez_DjxU`S0;LCk<(@c~(@ zwzZu)NKW=8FH-H)D=#MuH;uwv&6dyX%SbG!=$#!*TNbuhl<~2Xiu_P4la)H)o^*zE zN;FuG)uH~kjr|{6{*8R%Ux%@ay_`Wd3K4XO2pnIiN3l4Bf&^|=*4^hRm;H-FUKL8A zl8>DRnmN9alpw7c(FKpsY7w07w8GMCpCTI?Qtn2MSznGu>Fh3{zg#IxEga{_AWLN{ zVPkcd(qSE#w!(T6nR<7Z$c7ZoDZSh>p*vm*lE{%IR&=+QvPS~6gk@>P_&6%#^^o%D zT%JwZ0}lb!&DDhi28x}#w~4;XBGkc(kp&FGH$Po2KLq}dhwmOhKR zzChnXWU{x4yeaT-j9Q7uq`I7@0&1E^eJjDrvU)U~c?=vCTl0Y`0g=4~y|VI3ML6e$ zoTt^>jp^CpN1KTKe1@czQzqGbQ{>rO@`MDWRf#C44qjb8dJ!Bi?EQsA_RG4MdRzH) zCMTq*m*m=)bSNi92Mvr3`o|-100@0k%fwN8T12!Jm4L3**O#oRqo`JZ{;5g6Qw*&4cmyBn5!1Ueo!ZYRXQ`4;$2sc>JJe;XU? zUcTY5xhxQ|J-!p!ezqUdS@ura^5wDaSroG+tu`HMvc`zC_P!z@(JPH;0DL`rnQ>^p z(1M0pm^&9Gl6v|=@bU(pUsC@`oqSoge#c#u9`d61_wblU0T?IBCSm2}V(FJ{f`?AK zna9rv+t*!QC53Z*aK(qaA4Udp=m^i@i>7|c1*gx?^EG|Re4MEiWaSDI7x}{ZB4JzH z*%|~Q1$dDUl>Hu8U4-GFG&>0?N8rgO8rjbA@`1O}`lG;5oRHXEFdX zBrmYCJR-j0xP)#MxB)pq*=;NT`JD51+bjJzIzX&JzuPu{%KNf1<7lya`;`sOc7KRY z=FNrM5k8?a@^w6Ki@55_tcofsN(zp!|Y*2=7*B(9;f*EEd4|NmuelsK~Mdj_g}x%hdpaU((XnT5wwl0-%fC7nfdY6vAyfVkc5xygs`p*vr5p0u{O zFnI8Q2Z$Y;wRIPA$GnD zyf#15DC=z(>2W^xBlX+WhTBV>g-3k9Uj^~Jv)6j5|2;_29W4DGAbFupdXG0_3p=kE z)}Ob`s?u4icA};yRq}Tswj6LM@XKOg8`#cqs^Ob_FL37hM#h1ZS7UR;uHhtsIQ?kU zmi(;H@!Dh@%jSmuIfE`q{%C~utOcc>IppRm`*D^N3^8Jc7mGu$N(A>CrSZ+&$YBVg z?3C3^fh|obx@AgQ7DJsCv-sWlDX7lj$+rHSsM`8&=ZynNd(#mILbyZ38 zq7PEl?O+`9mI~+qBYG^}Y=ms}8UxPcv_)d&Y!F6BDtv7#mbp~A{=4a^42{V@)(eT^3wdylj z^yzNsv$$4YfoZ9X3yJ&4hix^R?I zz)R7gRp)e+2K z{pjiZb}-1r@+rKyQUFl-#i8S*)2;pTJygxQ40Vu-r%N6dHQQx(rKy)nR*+Twqk*xy2Z-@Q#enytmbWJvCx zuRkxhpwqLa%j1dUG&VvvdAT!JdB1{bc2)tunLPd+g%dYg8Ew&xi6%nzw_TwzI6dWL*Pk)FN@(^3&p~m?9 z+x8kS!Z%F1?~>*5R!TLt4B@1?ACo24wd>^M*sB$)wH>T*k@t$WhSkLRc0~=2CQLKZ zibw@2pKr+bB{MuO^g|@S6ns?iL-TsEW|z$lF`!3hbOJMKU8#fFevG(|zFB=bb<)e| zuNm3GpmaA!l`mk;Dr?i(X5M$VScFDCFt$h?-G5lRfVo^A9+We^{6XZcW;P1FpT%EZ zB?eezcY#k00DbxPO@^d>n7q=%7&b{kfCsnHbTo`f<+<1SBXVY+FMaA) z4CLBY>9h{)1~4MM!$;ij;7~Y^R}J?Ivn?+Ad#H@Ef?Bm^Xhj{eKEvB++h{yp5&San zo?1V<=eLX^^6p<-CbD+=DR!fat;x09rx76X596h)jkwXoSyz>~D;SyR{KMI2&tE4y z!6-wO-Da=hsp|6*^qrjv$>N}o*|^%`;MaNXmc*pmr*$7XF$6~|K1rC9F$k$;118heT`eClPn(3L!b;@nY+&ZeMv|6jgEegLqF-zgfuVHQ9xrYHWf(yOsT!@sszI(L!@SSX!k#`KXojPIot zJX?t!0e8PYu6f5`}fNLi@`Bli~1Rv3l5aZe~jI=YO`p<#D{;8qvO z!}$9WMX22kE@u33CfhZNnTx&r2|CFvb8{20z|Ljz3hicek_>0&QS76B!H2c!1X1wn zOm1)-9R(E^u%z(}={>cdHnghqUn`No1!NUuM0k`VLnOp=YEq&`ZqiLc8v-b(Zw1Vx zn6JzMQo>d6b2>dxSeRfA)}!K#EG*dTZ8!89ZnlVfW7^TmTG|r0DzS@=`KVp@a}q8) zuj!_ya}i-9r7dZ?+WjbNc=Lj3016 z2FG0*G1@Z8)107oxZ{X((XC>xT2r;7BB<)wphmFMv(-Ri*h-s5P;0X z;ET!)4e(aWK#3uVsb`}jbZ!=mvwBkmFtpPlVK>Wn=XoLp&GeFUl21d6McWUw?OIRp z+ZkaDX4;YqRY9>-T5NW`1?})1uFi|Dk;U>Bpxh;Oa3vGS5*E))su}N^!B942H137c zb*p|mT8P$zPL5khz=2_@dz_kWm_5NF`XE(2pcIR2Z3lrcNVedaxHV^&akFc0^YAlU z|B1N`LSn^qTcOpP>mKR#s*7cN>8WT6G6{?tJe0*PzkhnB>(sL|aE9y&xrrzINOL!Y zkPzHDrv$htxhWoWR?$9L|Iu^3AGXUC#C&bVujGVuy!{$`p>4~(ERQH){!&I^R=nE| zyp;u7@2i%okMip^T>E{Sx9-4o1JohIr%x}JSfDo?e(=j2!vd%Vr4IGk%$FY)Sm?^D z%X+!AU%{zz!`PS@ntv#(P>)&}sk4RbDWSi_OS-#|AC;M{mPKk6D|YC0I6b}~VcbaW zo6eMBt8f|P2=S;z4+z`aQ0vAh5vDK5+Wgq97z~QQ4VLe;VSc?Yls6e*S&$StiD?KK zIUPJ9ujLWmK*!qn$3xd(B&T<=?2l zKk;%Pa_v@39RxqWxvuB+i4&}q^(3{-W#s_)ezQr+VfW=e>ah7ZYyUi+Bdd?*OeLti z`Z#D)XTF%8@*WhCz9(pS=N9YfBrfJVe&T?SRD*ur7Rgs3Nn z>5HGqV%Msl=OdfV2brHAGmFo+(N4DC~k|dRT|G2t7NTanLu|DRC)bz4l%o;rtyJhN14187?jI-a;f-&)O z27025eH_v&w*N&ZgT(=5;!=@Df472dJk9D`z(w@klZW_6OkM>3;6`dSU_KqcNnlLZMgg@nNmROLai>*9u0yuPgP zibPFHEPU6e2|vI!Ek#yhWU|;=8fu%nVidis0QNhWZOa^OA<5BD}B=A%j9)j_t5gN5+uZ+82z+3^x&wN!W;<@;s^)iZFqQbHs zN*Li}7{Tre0$z*9j#=G3>YdV)Z<})QZ8RfEW%F4QE|nFyTq`|jAv%1ovb^y&p;$Z}LtRA}Zav){BKatul4K=E@`s!&di(9e3wC(&>m>npPO@B# z9zk;G;Yu4z_m`jXheczCHxos3Dp|GO)(OPcpm* z*+$}064K)5G^H>euP5wh*a-9TP3RN@KOsyQkwvDw%zCJ0l~Q%bKo8ZztM-+$wXTqC zsa7#I#?R0l&R~;hk^-B{-8qO9${j?fPCO6Uet>fZa;f-X`qk-Xt6PHz3(bnCXfW4g zmqLZZ+P4kDz>_$fP6zMxDp>h^FkU)0uV6)T0;~TRkBktz@P|b0b!AiP=cHF>PFR*M zW}NpUW|TMxQkml_8X#%2*!elU+PGG4S82aoJWokTh-!~&F=V9zD&WdBCN?XiQ{zDQ z;9gYF=B;IaKi@$)5xHaeo>Jr6p<85qXIWLQcex4`JYqz9yTc%4uJ1&iD=hOy02$y_ z-I3=f{M2SohFnRalp~4TM4pVAiz`bB$Iff>(B$bVS7QO@6GgVws#3%gu4YKYtmyMO zWb$@{Y139LWS3vH=Pt+xEIixww)KwXThc+N-?Ibmp`cs{pQ3Z}^vhu2&6e*+IYdkW zSp2j>Dp!F_3s zNaKfo(Vll+lx;55nYDL>LDUI*XWe;dJNH~sN-`w$-q1~uIS$5DlDT%ZW@~C;`dz!# zZ$AOn%e5v)c9gvypK+s_UfCk$=TK`RI_{FIy(r)_a$y~&ij|O>_lMtcjT~Bs z*7utUYjlNXSlwamb+iKIe})rL(7-Yq8KFJKl~5s}O7~;GXyWkddrXt9k4!?GQY9U) z?q=wE&^E?yFq~t?kSds}J4Sr8%@ggL>-V8JU*4Y3yEta3Ew2Iel=jKi)q%XV?<0r~ zix>9Y3#ZZF^rStMPc1uCf9;mjCh`KG!YEJlp9_llzfOLi zOF2g=LIu0s&nkP?aeny4OGyk;HNC*be>TD=4&**%PR!Ra#x`n~8#DDG!3*y!1X#70 zVs+lcKSj`yW*N87-aL}$)zIvF0%!pWj(FA43*2+1m9$}MJspaa zWispl$v1DW7}{d8s4PGl>RrqNdpy?TVNIMcCt25!Nf-E- zgm?zwlg5lLTpm%BNiN|EI#EwaeZb0=1$6jiK9R$!T0z#ajM8I|EFtWWHO^NmNFE(u zL_GxKRAGKAzOt$+zxaJf?em1)vjiRCF=hxmxsiJ>h3Wn z3OfV^{Arn3XvQw&C)E$FaZ|@%`Jq=OAKA)GQc1Pl=`t|f3;bx->L({w)U9cTWm zFPQ)a;V#|)$GnLe+Uv29ZnP?lP|Pj|<}JN^jk(AS_Ls$NhVvbUav80;pr7TA>kztI z2`VcW>&9ExGehrw`2zXo`9%NW6Pj=2=+Sv9EQ8Gp+TdpH5USpI-e<~mN6^4(V8F1` zR#)dM0M*)zcQlF_knDkL2q=%{I7J9K%noZf^T-_EWuSE*$N0jw3*8SNGQjcHii$jl zU}tHXpW}74fYTH2y&ACow#m33p!M?jf~(a}C|%XN2X`V7-RHvnl|G-OHA)BW`^W}oA33tS*DLmeSD(fLsSjwmBa+fz4zHw@)D#sR7hAqYOtk2Pg_(+m zESObzK-5)GsXOPT%C~KA=}pqmAV1Wby*$tqwUPzydl-Rbn`588Cf*!8Mize24y^&SbSx@MtBa)ht~!m-4Z?K7?ZU>ShlmitgSYwvB%Heg^;Z zr^_83O0CG_OTo>|!%x|cvex3LQ_sXDd&->WED!OIAD``B1bkgz^iNl-tJ@;o`@v7a z>IH(`N96TUTCbjNZu=R;hum&KN1!d9a7&fKz7D zcpe}(m{X7fQd(o3bJE+gXetRw0g=DIa9l3J%uIiKz2N9JLo7_%8&4A zf8wlS^xXxs!tH5wTX^eyS^IgOK3C4waplNz;b~2+Ufu2+3SW=KGx0QXtmt%hzxG64 z?3@W1XJq~G%J{Mt4wY>cslUt#s91fnUEUx`cmfYHmphNI0tXpr7;c#f`PCZ>W_yopOnGO2>PO_&@GR z&U2Aj-M}c}*%>8i$x~lLFEJ6bF#Io);f3t1>ilJD^N}R9SH_#&1a}4VOXHGM(g+SC zZMhv}lzjh8FKo~DQNsD~Ax*fg8ZTCyAOY8{IPqWyccu}SpMUKwTYxqx^_Ff) z$!l*qn2OQH_x$^RT#(<}Kx1KpC^fmDq>37^1xBKK4gf`T?6?Tp&$Vrw`bwi(v`>^ zXw?D|#-Axz#pyo%q>|DJF~sXiZl-Rzs47sfS4uuN(5btL(!Fc{)I+z3^hOOhqp^_?i&!ekaC5Ee+`_;aG!n(&!~ed(QLNY>)vjI&syNqHI~1*%@i^#C9p&} z_-EPnvK*eWusx&3wMZcNI<%2|BgW|u6p*&1p$8_``*?m{as}3okka2^>}+dIL%*fR z`97-_hKxix$V2NYsc@6K|M}MrUw&X`@pJMI9${#%M&%z&ERKk2?7z&`p4 zpw`sa$m@B0EDJOB6WTly;lc64dMGs8gz-(2cIozYQUH|mbEwH8Cx&5X)Zv?#^Int{ zlcJ24d}Ke89E%jSz2^|V6&Zkhj z1X19?A_ch;v z*31&$?_&IyfUkabH$JpVT~t^USed%|dFC1X0b(^dIY!2TgN$8V0J)irmF~@?%+4T~ zzPlx4vcO%j-ANE7E>VxhX?tPqCv$CTP`$pXX&tE*XXLtnDJ*LIGr@MJjYk!_5 z(xCSu@}ez=_xDSc7(rzqOSjJ%HH7yU;E(NcV2GY2WM_krMER`Kf~@2H7t!C7@6Vx$ zZA3wo@WLCJi{Edhn|?Gd=w79PbQ(wtAyWlhC=MkPm8f*yqBbANe_B=;Ug}LL0xoYCCDTy%N3WyHUGyko98%yO26FYS@NCrol}o=7FSro{ zPPv{kqMa%h^+VwPaSN``rVmYIJCsCu3s*Yn{p7(KJg=77y!mK|PD_Nosmo_#IU~1= zGss+Jkg~u6__`LlSA8L-DX`l2B ze_y`-BY+6auStRE|D)?IyrPW1ZgB-^5TzRwk!I))K@bI`y9NZLq#1gK4r!!w=J zk?xT0ZWx9b;PPF+-+R}(@4fHy4?OFM&pG>?v-duwZk>w+fs=xwo<#Gv5Ku%Uf%)na1AD*lycU)qLDlr&S8O@at+d(uu7t>7)l#R8*RB*6GWpWRZP!7m*iCi`$b z(iev{QJ7sgA%&CPm}JU$!8_qt9D$8NN{|~kW1E%ZFQx2Z#T1I|vu80jI7nI?uw3Rc z-*+|H?V@!T1C8MiRRS|F^hgI~W;LNQ96=8;7UPo14th%bid`5NZ;wa6;%1Fi7~P@g z{FR0o9J84`{{oCY1Ivlf)!la^-vA&rfK8Z^Xm3f%BtILo_9%VPU#e)oYL9=SFS&>! z53CleoPDLcU-jj+G}@Z*Cw}opULaj1r0%gHZJyTtiCy=sSsa0^@+7vU>(+eu*Pkia z4+jr~)4XdsYU^$OTl4Buzkn6BbzXdzGhJHTcdt*Pit`nx8=NPF!!+fIZv8Ae8G^4I{QzO?zoiLU zOgD%-dDPX$L$gc>?ME~O=p|r8Q4-C#6X0wenmIQ%8`+agi=~?fN)>&5Us)RcuEwvr z-zLyUMfgti|Ayjl@2ZN4N%zBCKS?WJcBj+?c(g7-52`95-7Yltlg z`iwDXIS@xhxnam&M*UUkch8@VbTTo=R}f@3z~p3!fvD23KU(~AApp(9Oob~5cep#s z7KX*DRaW4`NBy}5BPS!}U%dglVr%HOb9e2uedrJBv>o#Bg+9eNwO@a;u?894?Vi_>49`wD5dYm;aTgAG|f zOG%A$MBOAsn1yxSt_1FtvMIX9-OLWp{@SV{Yd^Rhl)hdwJ<5%JIA%C(0?cE1@u~bC zmK^oL)J-jtkYg z+vEOis~Z9CF?&pyllVTF4&`xc;!wX>#%BPXPohp2~g7Wfd9Q$0-6>jnd5ZU zt>^7Ss3iFMZH$U`n+Iw;=suQdsg}_D_D~>Ax!^Iwb*1QL`RNgLv7UIH^vQ`3O)ecc zsCiWKN)A2`qxqn#`(MHSzoq8zj+hV6!9RgABQX%hKkVHad@XD~OS0BtDCqH3#+lqy^rWHw$u;g5xNUOgdSMm>P2 zv@BZD2pMtBQYgI67sB4q(nfT35v1{(wG#Gac;9Ie{eHwJ?2G8w$g^fnf#>XjL?5sA z^qehLe><22W!WiyRAn~Bqe=2l%m;LpU!Y?{(iM%uA|t=ZIf}M>T$-!s==56#<8RFD zdPlwOzH>@3;rggV;lCM4=@)-!+wIUjX@5-0(OGU_R-1I#L7bQ_BYRJMgESxOy*WoT zHK(L3T2N~}8+~CS;W1BNT%gWJ^D5z`rM%{#Z7j`$mTy`uO072k15A|t&+Nzjk2CzRBOAA=p$OWHq*N|Zkr=$Ulkey zrRHq*pwzNY8d=&cwyY024C{8@-V=F34{>jk1Zw>B>8p%4T|z_lZ!QG9Pd5}ZL|;Q; zk5Y_=Bk2uP?oHsc-TSBC^GQt3wz3)jXpB_@RMfyzh&$He_#;2copgM zjC57f)2lyUyrM-2@FyjR9oru02^MU8tDUg&&zy;0Vh6cXd_y=(Zre9qSDM{5n!X)H ze%94z;x8-j9xzYel1^=$w}{h1Mr>$slvQP)l~FQQjleT}>Y{=|ze+detBror|COtk zSJ9N5E=$}FufsW;273DeR-GBNoNzy5CK`&~`#B?TcB8TzbEzcSAHIZ|dH2lOHoYaD z8Oex+8xRidE z4DQanKwe#2pN%m>f@;Q6jv}oYqyxW(S~wm(?)I;28uFu0EXW(5ESVt}@#{br|F(rr z5ecl$EuLv2ry&n~DF5%w-Ld{w@CS+}V>(>~C2@p2AUUD}vWd2IxfuUf!Kxo5fK0sy zm>l1ED2OtXU^#S>xq6ZHMc{xcCN{gGW6F#Cb@9fm6-kHg1i>tpJ3tJrjUl;shG`dl z$45c)y4qj89_1ez$!g32F4K(Zf+?qX7S`4|oO3qfU+_i~*M;{`OCnHKrgvw#md*5= z&VD4G#?O(g^`*l6SpiSD{J)}QG~Sm@%B5rGX*}hN!HB`t?V+bndrG#t>&L72?~ASU z(oqqd?BsvfF3%5+P4zK;Sm>aYc53Y6Nh&zMdN9{88JbP!c&O~mc)@3yS=u^ZLe1cI z18A6Zc>F4g{L51=e#>>~pVnLQ(0#{vu1q;NSYj|8^49;Rof-?P>Y1SZ-Cb&8<`_A2 z*b-L#KVzTwuU`M#SGUW`jz#IqCgv_;>7&QjyfBc#FwvDHUp1Q{^quruX>v<4Cf@34 z!=2%Cj_#$ieosN~zIfMy_+{vazh05g{Y5%BGcPYaPj(}8Xw0!rA2D-Z<@O>$J|7eIwJ{ zv<-idvZ*|dtl(x}1a%PTu;Is=PdmqnM8$BYn$mDD0Mbra0Ofys$eb|nwk@Do#QTx} za^yc1Cvl$oL&5-fPZp25?NkP05#qsmbt_J z(Y|z$NV4AXA5=xgu-JKnbe3Z1*Ooo|N8P7f&CzaS#89F*v}R*k@%4Ra&t&1ZAe!Iz zy`D(gCeK^c6mR7TTF@f$kiOB=rALy_MdEi<-My)VflzTaN)x&*2LB}WE@?cy1MIXU zvg7W$0sMSZEf=G-10jO3pbqY+IvcJtA+H4;s^3noUr`doZ6741l%vi0@+=);E!HU1 zkf=R2-VUxG%a=Truwprnou*| zsd1A440|CnP78Ee+-w}(sXU4Hx@)|-yXiij-uE8^4cpeWUCi-DUOZ{|}gMlUovU^q_trDKWzvDq+2Rl7Gxt7PEI4c(Qke@_CX>*6ez}J;T4+GXD5kLYGU zw7;bN<%$0hY-dXwhcKGD-)^$@Ssjn+Npyw{ube^_)e}dX#@bw)ACB+Mt`wb^%-|f| ztE*bn5M);S{e$>4vfr`2P27Z+>8SlSikM$kH)&i5PVPmtJGbd|vxIv3_LK;cq!js? zzUDsVZf}9a4SaNZd1mCf1*G>~!mr1bhcUi;C2Gla@-dA z4iw=w9$m5#+}I$V~a?;aEx ze$w%A5pCD86{rFtDeY<%5Tf7AtvAU?1vj{-!3UiuZ*j2*%fZq zFU*i;?Z35H)#$Ogot>N(pCJwkNOKNQ3t?US=&fOulaE?lF1UrO_<8+fQNTrN9)F?e zc9<+wlALKlf7B-b`+>Z5#T&*wjpoNfgN*`ic*gIzRwi{`XS%e~XKk_)<;xKo#n9I- z2=Kpa$8wfC!Ri_w#0|=&16NUTu_J3ppFL%)lk;u z+3{AV!YY0i6-ze@G*?d1!zk?}i6hRc)4$Tr^JRveFr!4@%|Qd6KUeH zI(Oc|>$!M6WM^x;U3=@1Tfo?CZEd%WR$t|+(>A3wH!k*~EPLvvd$L{XR20$-rbcXf z!cHp;d@V)XRxMhyWSo%WE#;`}Lu02fS}So0?^DFeF?RSW(BMAoa_DTV2}XNUK9i{7 zDkrzp4n+;e|3sFw{D9ezdU8_u05^9nM%aOs+shW^lvQ-XROl}}*p3i0{IILG_uuGx;FsXue5VPh>1psVswvex z4XnJm`6I96zy15$0>E-{;veTC8fQHlV#Vx0_oI ziU^GCEqwd1$C`-#vee!VYEvHmz;#NjWoURf>Pb*RSoWiQ0ZiM-VhuC~J}hg&t~DaP zk;<31xBqz;tq;9$j$NZ`(Aa+3*I!G$o=QAA1UCk`&CMAcKZTdfL%dgdDspoPuzqvh zKb3bm-+R8k+0FU`b-#OzO(9sF+IoQ3xazy3RiIMn>Z#Pucm8FZPSTC8^ z{3N{Xf4I9&nEOwR_{?15>iIf%6g)$yolp<5bvD?$E3B~Fk@_VP9n!y&O7aL+`$Y+on|2XH#`?Ux2$C-h&-i!ci_SNU<}N=2vHO zcVwmqiD-}RGl> z_$Ut?5m)#YCiBCJ<;S1NB!24if%95^9I5Yw1*DTjU^x$}t{?B;B&H2JGlwWDe8LE< zh`ajG^YLR&tlG^ax9S@jQuNz)rCk?kFCsZ62t#fFJs&-ueL$&O8@y> zx4!itZXD;~-un00!m~5I01B@&>w8ZL4{UJFCbM+D&{L3HMItb= zUZcT~!vYFaNAkkj5Dd~XuX2E}VcVyWl|(&2lokxCjVGUY{L>`XY+ z=>g;7qr@35UJrLS(TGt8S zIWyRw)=Yo8#hEpkO`DmQ)FQ@0o)Az{1{MKEdndOSIUTy_=9DVZeQnkrCJ!mpZ!x;o zAHbKo`NGrr9hrx^HW~(yRV44DkU_OGq3z89Pe|CwMrJ+w6U0G$QEWV24L;Vgd)?Zu zu625Sm{hKmS5ao&tE{dA1OJpEtoff8u!RYgSGspM&LwxdQ+@%qR9*T;ps@Y2q* zi;?7(1Xe>phh;&ePebCmH@>%Nt>7F1KYpdOXUAbG)MKi z-iET@9Imc(?iWNlqbQpf^bZ53U|(7hGnkP$g}&y4egbaG0cjieyCSiyDO`HlNvC|KiRIL>o+5= z1L%HC__$Coej72gs7c@ES&RVZxJlgDz@yMk?r-BX`wkDb@R;H~*Yd5qkO|OLH&pbyE7yS7szyNRGcjZA)v+h|LJ*^VKte(;$Eo3mnfL=a zzT-Ef=c0KY?@B#lcoy^~>8Yq-b=};Yyuu&C;f*hQatn68Z8~jGxyLr7L~U?~)p!}a zl-rb`|1b|mT$?-WSa$D~2>lt0TVAbO+RaEb!GA0tJ@HUaY}wGhZuk4+0nIY}ag0$v z2N;ydcWf2Dz7}0ZfYyNxkkyBaYqp_#HmHal`y;aBQ1E_O#bWpJcC-cBJ)Nj|aVe5q z!8WJ7t!0P?W3#z`K)`CQBIh0%ncYN1ZrfmiV@;UidJ^;FU-JbpsGXl92YTL&!Pn8y zo{Ce$Q^O2~DA)I|o5wS7)%z?);?jtN1}Pw)td>BHGS_k7GfE_z3|}B?og^ainz%T{ zg|?)yV37Dt!A*zPG9q98na`wef3&EVd!ytlSNYRX0beDZQ3GsaeZq`24|=Y z!30HKIWzSp3q{lN@|V2R4VFNb&&_`V1kjc-H6jcRiW`1U38&twHa`o-bMS445+UsA z^Eo;;XLs4xMQsaOg_k?ung_uj4a5Ia>90-6eWGplur1R`je;(T5k7$r2W;&xrfb5O zw71vwRvR%t2b+oZ|3awVnuN_!0xY%|K zCWl{o!aZs2ea&w7i7PU>k!yDMW;ZG;MsxCc)hI)U1KoQVv=C|meOC%@OXi7zK;bKy zPQXw_w|TkmwiwLwtt;}%ijly5+YNj+g?_C^gI0SJJm_V-;Dzn;TX3_s3gu*Bv!VMG z`h+$I7?L+>NJ0f%moMK#-1}!Zet8q?{^e_iKoe-SsMmZ~7@1 zG!VQw11As4c!=3)0eDb3MH(Rb%tJ1cAJuFh4xno%1yE zb_IHS8k#^P;;xZSU+80CORQ|#jlLzsS{n=2qxScZr`pY3hquVh{vyS|j)xBZn`a&l zOBswhNp|tENj;@wEiuc)*UZx$Su)d-k2-Wcq$M7I+;6#xZ`D3I0NkT}LK0|}vgF&1 zo@=){i+Cg1dZHlqfrLM{0P625*&*(bmWTTN#zYs_MWh#mCXp^v6z>Ab8+y2GNL+NP zC;kCuXL$dw;RMBe#84KP8|yGbthU#ch4PPRt((5JUOo=5wEy&eWuf9C-te6;%byA{ z7!q+3?9DF!tNGvpYcwMG;?C>_!~{JIeoyZ8bK$zt;o}zvG?#dRwK6T+DPwelxfPy8 zZ^S7cOdmk)O}2e0gF~pHKE0MDYrYW)1<%S9t;TGv6(AN55#77{u>1Z8N6=E#WfWYI zu<_ImF}gWd!7YV~t{(IDUHP)`34X15kl(7g4J%9bfoBD-kg zAX20tG=5CD5(=T%9^Xx;EvQDUebs*C`Fec4*l6z2>()6|;w-o6oiM27C>X(ytQ3(o z0%p1aJwl5FyMRyW+H3&a=*N)=@@^Sm}Aqs-<0Rt zMuc>GYJ^n?CYFn2d0z6|I>=2^Bimnn*dM4c@ni++Ja|327(EF8?8NkBhg+- zMo1V5*fC4lx_q#`n-sdTnTNtO@q5z|t(`A#>~()IoRLoje$aJdvA7#(y|u3LfV*J7 zdB{;%XhJR6_rdQYO4%$xcbS`%Lm$EOGg@sChK`*Uz{!+a`&VBMMbc zX<8d*jIoklhyAPul+OtZ-RK-C2K{koDQ~ zi4bzjn(u!3!_m=?Rn}|(#p9%vPrFtcLLx+-juSh)?e6Zh;{g%EciiWjXIs+Q$*&DD zr&^pCAKw~X4JFodr+L40t9B3dguE+E2H2En+Bqe-kBp?z#Kj!7^YYgi zra#5AHk^y{HSQCeZLthh5MArp#MVvpeMbw~b|<8*gD>l_TKd++&nYn8@4`LLt8Gpa zZQw1rwUaYh)?e7-yibsz+Sz|Hhvy#>2*21KTDVt6f}E9aHt@}t;YClW4MbC}X2b+S z#HNpapp&7Tn_@9+y?T=MbXU#HP!gs`Aq^l^cdzMR)8^6X1}z{ktTv7l5vV%{d+ODl zWwnE~pd1R8(S<)u)>SxZsi`St4Yo))r=MBZ*KkZ4Y1>T4h3{rS`+dFH$K*K+iu)SJ zj+1#3h0e86iI#y7Jpr2?-VfZHw$nR4?6k ze6c{@6|ifbNd7+8L2UbC=}+oQH)`H}iY*=~e~#Y$6~jt6UVDzE`5^!!_siz3<9AR zh%-zMRxBGlh20)a)Y`&V0cx7QJZ>B=C#9x(-Fu{b|G+BxwQgc#Pakca&|g%z&g8_G zg4zzqnI3hL)0#T=S0W-Rbkes>)EK1ZD7*$;m?E7rQh!f;d%*d%^0ngX^vqV5rko( zLjx}Uh+oF3gtt1SmF|~{iJEhr+`41E7x#V#liw)4!J2 zXT_oUVpo60-}y$r@E!L&Z9_z2suHU|+d&hv6>3+p`W4ct<|0-+v8bi+KD^7q_=@?B zPW=gy?u6LcBKY)b2;qtFO?A5dm7MMU?qRmXMg>MuOe zy*+5pd7oWSpHPtCQ;cEME9mU^R7W!$E6;(3IU~dO({br3E= zK8RM_5nUWAzi0OI=c9>E9OJBr1+>wW9ILW@cRn|eYe>wm`EO1Ly+0}%jRZ-5-O5+J zfQR9KVQWR2i%nRvkWYuI7Y?HnO`MF$_GikCr3Ntk6O12qw3vjqIJ+3Sg^ou~!}ban zl>31uCS&c&y`GwXW5ajPA)`RwO6;8^WpdODwtg7n&hGbA|H=VJZ0cD$1gCv)3D(Qt9|TXa~AO5&@;ydV#IHGu20y zo8G|yEGFwdjHfX#q3Yb|=&6Qnzt8Sy9+|i|6?jyFxH}c_gsa5W6Zmq*LdNLhugN4q zf5J=K_EeZ_n84~O0s+}hMdIs4G50^rMZ6S1fAlu?foRxDb@2NhHd_l$D!faU>Zx3J zf~(<@-~-x)RlctQzBq8ffSW~h8$DxZJC*xy9F-2XMqCx0vy8R%Wr6)YH0+E@vO*-B z4W`pdlvj&>y`E;%`0`2mqX2RTn*Kgc@rFXNtxH z0THQ)A^D22=|(eFzpbH)-TeY;k*I;j^OEn}$%5|G0d>k^a%zn|WK@CJ(u>&+qUKdz zkK0t3DaJlL`YRB-1dcDs4o3i1dj;bP79DX(VeH|h<9mXBzZEx6^jA$}$rv)LNzg>e z^|Kb~v{t4>4q$9_C5|$Y0SZU@%up>kCEZsVm6uL42Xr^vzk9R!DF%Hg9rrNfS+vv# zp1UnPTP1d+CRv{3IR3B5!}z6T`b(rXkJp`?v%YAd7_W0_H})D&ye*1XUVB6yZofen z+ioaI%_3VYJKyv+U}l}8Qbrp!Q5x+)q0=6M?AMVu|22Nku?C~Ale^D2ZGCq$p2gF_ zOd{yRPJ!|+9?&n9ZOT2^ZqKE-a%)t?25gEQm^tl9sycM$sy8uD3hzHB|10;urVom7=&!naXRr`zRV)K|e%efXIYi5@HtUTv_6E95{p?vmqec#)BQ?OR=I3xa0@3wC{o)$>? z#p`@T_3H531OG-?APe2)$91EdqOFmUcO8Iu3D}D$*{JlH>conr5}bD<0np5c^$Yml zyd907-NLqFBr5u*UU#=tI(65X93en25CsumFduakQOwHso5x@cDH-l=fS?q7VcfE# z-=Pj-O6Abc|2?@~#jmRH{p+As9wpNENPe3g&HaCN@9k-RKau8IR{&=Ka>eRJ@rK{D zww^sRB|fiaFyfsPH8KfHr=Op=1&75;py6Sz;Qs{4$y3#Y~^`xQceYNEwbeX-q2l zu~tFU))NZ1uSrK@Uo$Lpj8$SfIYA4;DH-jCj2n(bd4 zrzA8UTn%XmNuPOLAJ7HMs$hD~^GS9@9LoVZoEP=kx1CNZWMoBz?Hy~|fn#ls} zi0qdk6`GO+`>D5}e0%rJ2mD8erH^aiww-rC?dH3H;ba(fXdUGmPZ)fjMMCvfbc;G{ zE;t9@l41A_fup9d^AnoakCF=oj6ylU*1sN{DCLtSV)S+~4blPU634f#%z}b3c4Q05 z+%`G5ZkF6cpJcg|@-$^;gP{bBvg4ne$5H@RqzHb&!eya_uh ztsu=rlSoP-kK{h5&Xt-~H>QK^4yCbmLEDfG>xJ-GSkcZ=@Vj`oUn4H8<$qrvs zpI1Ye-qKLZhcia$p{@wp1ocvq3qZOkwq?}4UVDJKE#QrlQWcMc>hHREMZdHVJ&b;0 zSiYwP1gYXU33TC0lqa~Zr21ZK*A~UxG+~=fCPB4)Uv~l}Q|#IVWZ6+~!5eYkJ5E2G zWjQH-(eJo?_0Z?g>3+dJT#yE+M-TET7@HRA4=1-xtKEA{z0)++0km>c+h`BT>K_HR z)9}-_e&E|#*Qhp4=9^pE_)YQM_+cLUoi}*LG(1Kvvus2!YH;z?@u-X9)%xNoDM~_) z@@#Hr%z5DG`OiqiWa6|BDWg=C>z8|rYd?CHCr$vdJ8XC+6Z0n*yURkz=3G4%ART8Yuu(y~Oy|w6<{=-#o3zUZ$D2Y#+2$8%-#-hIu`8 z|M<1`(vZn5$Xj&v8z~`UMZ#NPnKDh4ZMX5&C1~5Gw11qMI1PZC;zxgtrEC;DaA@~^ zru~CWJKhSH>AV6H5HK+OuVt&iVJKPS`SCF*)}z-Og|3g})uN%PUuCzK*QYejzx&;g zTr7H$jkR1$Taa9KSDo#X%F`{HCE%q-?d9VU=i2$SOWgi?=ca;k2a;IeqjUz#pYv{n zHATx7s(%l>aaVqwF}LwiK{v3;qv=}AjGM)xD2_t-S7hYwCF#b8E9usY*zQjA7h|I4 zP_-se$Od}BMJSph;f?3G$SvRfMS%nBbjsA3;Z)Gm#p-la_BpdLbD$7rENPHcHWINW z!y|&upI-m87_WuDBIx>B0DXzf-ee8t`|>3Fcp;2>OUAdEF0I7~>U^rN>gvecO2lS# zoW@~TjoLCzb1~UbA4;a1z^UxxTZR^}3Rf*HOuRbz_jQxmVxl=$CpNU&;#;)nY!iC> zeX-A*s8r>9csa*+3avOtGo;!08*Agfzz;*mPwGzWCQrUo#jh-uizxzr4V_MyVm6^d zi#}2>%uMrI&(ii*rKlIby1AVzyLi+qtNN_-$@PZ>Rh9OkQkcQI(kfE~y*`{5pVZ8H z7VTS>)YT$f#N~($ZK;s!a4UZIP_C`nEKjE9aI$&Ibuu5+SZk#s;~~nY==#{0(*nB3 z+Mj4EXL*&vI}%zy^E`*k1a0mcny~G{QBQ;a0&}|dpJ(M?tl-r` zRn;cHDD@Imp0a0i!9m}8L_(=Hd$fTy3%GZMxn=ZUoSc( zS#zQ-Tp46 zfjtE@Q{6Ls7l+>TAvKNr=rQqgLF?-;>n+-iU?( z?yjwJMe6lK#{Gh2=@QF@IH2u|`c`u+Ht(oly=v%v+ZdXe-Ti@}H|3_?Uu0bic(b`iUG=2@O7P<7}% z@ShLF@5KA-?xPj+*v7j4akDukc(9GHGJAirs9x6=*DJrCw-BhP+tA8x;0eJG%jPW7 ztb4W4(W{ZY31lf9-TbS&BKoh6>H>8VV3`b8dpT2I1lvg6w7)N(uwsbiGC{xHD;eS5 zoTI6{Lc~;8YVVDMsrnqzdWT+9ohFHy`LGOHs=zOA;DxY8mLmW!E?jc zf|J^!n}X>+>*gPpHJQI>evwYjhr9N)3lu}SD%;PM&Icj&Kb}{z5eLK4F3iB6Qr&$| zvx{@tRhdd4*8f_u;|PqEU$b>(^Qww_JUP^b-+=~c$VG}VT+W>`foea(kI>t;V`C(K zMZfLVGg^udP-Ro(x53l$dh;56!+dUqP_@ZRJiILQ4tm~WaQ^ z`9~%T(Stpk>t0J(uCYJ1l?^FqzZsWmoT$NU*9cxn`nud0JX@_JbQUs_nZ9GiK!k4g zIqIjo^3Tt8FNEA#C}uGWoT;La#$}=iXM@_hfV;0=_YY0NeHK}r(I}y@3N)5^^1*Vd z1uo=u!<1KjZ0_qqOHBbXF17&tUE#np^PaMOT=hm=FK%f4XUoE&hRG@ev~g4SrH*6P z9Ed)>61<9EOpas(n=GY>L8;wKXuJFE(5D6sGjbvTU&&75wT(53#CtI)RbGNRl~%Ht znt!l>rnN}T3v(D!*wX*%Smh;hg@P0n_ij zb8@7!0Q^Ud4EI6b*e(dS+h5-Fp~)XKH*1@d3m;jbg%{PolBE_9;U<~!-)-%NHk^>T zb(2j74&yF_4}F0m?99;pF^6tovvDVobGb44=+e&&+kdUu ztq~(Ex_na`pw&mGNqj-=76`x%WaYk{=c0?@-6vIbyC1CNb84!vR4V1QBKjK{1y-+f ze7Qfx%Dnong7(e>BR$xy)Z-w0x%lh5^z*{48YRtyQR+hrgP7fdPccr)w~-j7wj%Wa zJc{y6ugzrAz8_RUYXnu3p(emp{mFa?4O1u^gUpV?ex+sfi=o}c`B#3b)gXuP&$>wy zDZKs(-Y`DSseY;CsTPc#C}A^BiRI{i&j|EZ^XV>&xr{09>)-^Nq{bQtnOupN1Siy$aUG!8p(aJDhBp`=h^l*uki(VS*MI?#}qp+b$@60 zKan`tMPYeXKY5LSd`|PDVmpM(3Vo-QT`o1JO6aS6Ir6qOOAs#x0zQ^<`yF2BAR|k*g!MbaTu-P< zGx=wlj;1V^5ve54152?Wai!1SDBahw?^?nytRT5miDG&l`-?RR>H*FF$rAwrZ5|bXy3%Yh%`c~R@ zOKQI}Ag)Lw=Oh2#2X@r^c@xg0(}gc$rZ4#TI*UFJ+meW5pT5{aMPlT0ui>r>gAs%# zKdj0z&(V1ImWYjo``b$xo0ZEbJ<-d@e`&H`EFzQ_COB+QiLb}}sv*HMeP&Dzwg)E? z?0?=XN^f$T;k;*`<)0tw)tPVqZ@f@jh#2YF-_ylU& z6#eeyoKhoe4Qw~g6oME(m7XO^VdQGg2OA6vDIeYJ^s3NcqUf7)(xq}Z-VU4aS2@fX zt#~V+yJ5LqU46}w@~8=V^jHe-+Gvh=H(BEe`sw>dn_`xvQx!d|EP5PgGT+QBqTo!< z46_V*li1%(_LZ=yO^hLU)9po+vyfJ?TMCzT+mVDDiSs&^m+ADf4$IyACx85|UnoPH zZ$Ex^I$EtejLKwpxbY?ilf4d{vHZ1Uka%^L+~>%_MR>jH%y}wZ zUY8{6xlXF`U$@VPP9;uX9JXt4gJ)gBV?Mso1=mqW7vhrL&2{uT5p&!dQ}SV;-Sa8rOasAJDHrio*5G>-vJEfDBr>(_`VjJ4pxRfca&v8Y1T6 z!U>+4#F94~MhYeUoI?=`h3+j`wpHyH6nP?vwX@7oM^*w&c+}J>xVKXmDn=M+kOXlDr}1!V55nTClDTh=1G%s7%LkvjBB4{QQ^x57?YLO} zQ>TA^9_dj_QHcb#2E2bTu|Y|jwGTw~>J`!YqS1bSW4(MJ?h*F~&YdJ9M6Fljt?><2 z*C_erqfqU#f-GbhjWufKjf8LIP3ESRu3eu0h2Q>nI^bW-L*nkIucZH~b2Yr)Fz&#< z*`4(?<76wMi<5Ttst1jkb;R(p^pk5RRw#YED&WJvG432h14J#y0BHoBHOpi$56c!4 z_&A12)Rwj4wb=X{zXqaDIWm1Z}lv=ikZ zCUr&aKZxwKIuRUfjjRf2!XLD`ZmUq*NXntVu@OE|CZAz0b)UiOcYy* zE?ULyipmKDKCcLNLg&~aZ$~!zdkJ_Dvw;yTtM7nceRFbfMWs$-7uAvyWd(7zhO%Wl zEw-0%PhKe$s#kIH=f2)!wVYY`iApa)&{v&@VD{m-e5JJ)XT6XdkE&l5x`t+~X2_MQfc0mJ~~XlW0R_DrIyQ$BmK8E@g5X_Zm!A zN}t`G(49QlE6GUS#;_kpI}pL z;tP!mzhj8gj}6&ZqXX*FF_C0{kc~*7-jQjmv|eckaUdd}Zm(P7bJLYWI$XyQRDprzL}|3D$kM`}4!| zaT;8B`;8yU`0P}r%FG^cZj9Q$NB@`?HKL=A0T5_8?b!GYJL*QI?!fCKr>);3qJFGR zFjX%7bvEhvPrLa)Wo(DsBP6>@2rsbS7DRjROv$98=RZF@Djm@+)a29k^k=3#9 z8^}ams`|F?aGSi#;i$?(!&+sc(fC`^Xz&3_wy{6KT{;TsgW<$v05+iBfA$mZFH$te zdI3C_heqY&`SNB{pC>$QSM>#D?d|uoRAs9Af*)iPWN?brnb}({vm$AA*};#NO7Og? zrZFNNP6pNh6PEVU`lMQ-E^S$UUSHXJ^!EBsJ4&Y*^3A2n=n7h$$(Fxq>6skQr5L1Q zzx0^cK6kN(-!{B_xl;XWTT+O~OOfVOwbwF28mB_zOsUTK-|KTgG%Aj&JhL(Iia_g# z9{pN^G-yr|^=h$;zEnSxQz5CALQ|y5{^l`>;}bvHWA=FuhU-+sDwd~rH4Q{yz2`TM zhbgDn8oIlYY(vsX#vj|s0$DvH2ASvG?DEU=J}N8o+n-msf22;5VVp|vncOZ=c`(I^q`&HoDIq8H zU>>P{N-mdtQ1#eiLFs2WoZ$!;)HduuF-Bw%=Cg>Q_g8(Ay=i3*H3|1^%tYy4%c!;4 z3wz_x${G2nfR2}pXPxPyTCDz(ir64$HipeV)IdZ$sV?49#XT<@L=!r>Ko__q z;gw(hW{jXF{8mY}MjQesQRNg9*b&zk*Oft$>53QMN}r(kUg)m-h(ej<)lFW#3@ z-j5;Cgl$^v=(E*db`=+*5v4PlPAA1%gzbx!uuPU(3PLSq29{l(B{}$ieSG=sbJ^8( zJKl$Ba_6>O+muK;Z2vw7sr8Gna{)dLC}s?G^l}{*tn#9lp?W`5C7Fs?%*>aqswZ=0 zK>F7FvBQ9ByL0r3f1?u*eO7m-S~Ch`2fGxht#w5S+j5YqFkOiw0Uo(R3v3aZyocd> zf+*5#AG>XNENs&Lf}$~^&v}IRp-3O!);@Cvr!d8Kr4b?~!(y4jB5V0qJs z^%et73SRtZRV4-Ef4Iw^cwS*o7k{7Yz0rGx7q$Erw)-BiuWeQ&>ZmZpNr;K#zyH4g z#Xvg0M?Q0`8CXfbOi{a5acsgA1T0kQ!HN^KOB|T|%oiRW2?bOJ9s3+}^f_q)@yEdN zMSn>QtcO9z_3N|cvyU*YOBTS<;%tG=W*OX!xdGa)Qm+u?mGa7WsVE_?x4`d}qdLt-OX^G>snt4-*6A5C zSk`0NvSxttG+IiRwo0d!Y+B6S40Y?2#&N;rs7rK%f$d^_zCM{1Ugd3QJNXp-R`GZ= z>5t=+z>^PKZLrGbk;8PDpXsxY7P<^)&PJneGHd^n4tPYFf&4+q(@}u2;L?xyNe?-R zo1zy`7A?dWPQou=sS-Xq?nv2ox*;xzQ_2bb`Zj^pR&`h^&PME7=?DucjsY`nI8Ov0 zi-JXCCb^EImD~X9-nA~$T7m7QPqs5>-EEbipSh8qKJ47f4i#(*0G4~YQ^3Jf=} z5Qv8JQWLm{)gThHzM64=?s#Yl~Yc`%x2ecF*sC41t!Uzf! zKq{8^g};ckDxA_W^XTtz><|hh9wll}CqJxrHba=Yrn~I)O~62FiKVNKs1F3f|M7P_ z)LARPQ9ufX&n?2+vPlsLek-vsiIx>BcgdC=r}fAX)6smKevu|j-w&%WYr#%jor?s1 z9Ksr%h8jVR1)n&5MHg1Zu*js)xN`L#Rlw2dFR!bn@O&1&rzqGm5El`r;_-f4g-b3B z>7$qp^xeyn59%l zxWnEGaxQv&@?^p8?IG+2Us9*Z^=kX$Xvby~4!EKIog|2$wbf$(0rVlC?F3yfAR z@vs_Lh-0nO)?C!|?0YWYw?P0UJ}6|GKqcVM6Zgpx_^6@t;8)*X4w@{XN2!`NDk|eA zZp1EfoLcbFp)HjrzfE1MPKdp|vr56dP?BIVN$0+2&tFr=+uSK;8%TTXtEto1qyMAz z2E;hrY|L+YeX`5s89~|?iy+*7F(L^4Y>8@@u|PHpS1+&3@EsPS^he(%+y$o=e zz!e?*TZ?hiCLRx?Lh9==JEU@@BHB#S->MBK9Zr9vVM(!48aF7cM}_FCZ2H{87?)?^ zlV*o}G@O2ztVL!NloE-`ErT(*k-)fRTj>y=4xqpJVVm|FQ*fcaWZ6Ews9+QP!VUU# z4~}kF3)M;GH63{AIcQ5i=A&*DbS#S(!l z;8(5L1HW0nfwnA*FT%kl}dz|WaAjn>OL=|_!W z;o?9UF(E`~HAAaV9toyZYTT6@P_PCmJ30biZ0BLoYK=f^u+VzzQVhr0?@)Xd&@ni7 zKK;;LmY;uFg(G!&m5=fg0a~*fzN?k0>ID{7aI(K@<7ws1R78@G$G|U+q5F7@V=8s2 zXztXuq$(81!|8X7KBPESO}WJJg^O2}_p=VtOlSo8-|tYeXOWr9Pr{cVtd-!~>A7dN zXkMlxkB!5TEe5tPQu&;tjlehihJhO`AB+ixQsAH-&-!lE3aL}mU;DaB<-#~dy$`$% z{`p{W$vPOw=V*0mVAM$bP|4JxZ8`O$bqY@8dE9-}_#jyMS>uB9q_H}&(@r$v&G_TS z0gvyJ44p3_TQj) z)+pTv!^hHBqj6aZcmzYUCZ#ZsZ_{~z&gOZ{lREjt25dW1T)|M-j5s#xSV^2~5- zzA?0KTS;DdXNA%W72O|ywON&R{KlhkxpI2StM9J`-?pshxB){x$IBr&{z+pOp^T&j z>xGLJ&!GkUy!nB$BPiO*|41WLuC;1W3Rc4_bq*u#fA>p}RIOS}`P;GMv8+}DWtgL( zmvvs^T=&J-^VN|&@nR{W(xW}am9~jvw&}vJ3ks#!}W|4xz;vH)Xc(iG;%Hu$Dr6()l}&SRIRBqf-#YHFm)$k@E9~_0q0{;gT zV7cSz>yrgLp}Qe4T!QrpEe3Ar?i-IwU58MXA>B>gE#}U6#d3MzA8IEYY#)+~u*4}< zGM`#x7-a(e4P3Yo4U_F1Q1Yaeb{z`AYAZK{=`2{p<%bXw2_b9;1i}bCD(B~y3%6TE zs5MnQZq8f2@_@YcY6B<+EWy|#V`?}BJqinvq7Y630AsYwNBvx2zVS*6HH~N8+?|Y! zya*F_kv8zhM8S!>mT6Molrj*OC;(lClEm993yuKf#!e(GP*NtSe*{{FRH>97!fr6E zl=jFmD9nl%^VK67SK=-!-q?1v*PS-F+uUeMIr^dGgv^;f%xim z2eFtagX0m_k*WfI8D#vVtx&|IbQ}q|uGT(;ows@6(38xZvki--RMMfNKhk*XqMFAx z_Ts4I%GC#;*ek5%(Wxo@_UwaGaX%rqlL)! zeTU?^{`K{p0-jmadO*35H+Ne2(%J~0Ivz?ZsZ-sQ61WncRwD7R&Pa!=yGdvH@@2>3 z2!SVd^pMOTMa&tDku%p zf6>*e@ql-mI@jmzm;N|bc@~SL1&en

jZRNS{PpL$Ev?%W#KOs2j{(NT#;UT5zR{>qxpXNS4sLhg zNC;>H$Cv0RJuvVXjxW}LLbR~LN}A%h3AwftRk9DpEJi=EHXsC8IKPZ;=KuK{3 zeH4Hl=$fi{&7Li@(i-8TGO}}*;;1`^_HBH8ERN#kfhCe257b;2Vg!!xYnreGV@4ON1%9WeyY(EUg3g3RCmENqz#Ty*} zSE~}BiwvW1rQ)$cJ^GD0js@sJb!Ob5ZDlO7a_Nz}Y_O;z-{7JlAt4?&Wqavjvr@%^ zsN;n48!Fje#Iac(1>@xs^=jo;JgixJK#vV|>`+_rz?-d>F5im<%>ijpx3K!@A|EPW zI=4D9CQsqfpOWM$D2L;k9+O*BDM+&WDv=#@Z70n`!Z?vyd+p=m=!Amr(}f%jax(UQgUci?RclqJ`sZmj}X@aM#TFTE*k z5iS|n2q)P6dRKF9&RBe!z97>=sc>F$WJ`;Uii!#^on}`l@2zw4X3%rz_T|-w7TZVO zb{=!$yoI}gyL{5Rb$*OrZ>70-w!2_%hvEqIhq(()QJ$10)is4LBj(;t9l&=Ac!4&u z;U+oU9ts8Bv16yOjt(hVCF3mHJ^6MT-AP@A?MgWo}Hc7V6++!ZRtiupKw7imAH zu&fa22%Q%=41KL7Hjc7uUDd1jW4!ItqkFVYFN)g?d5bFNXew%n^Fn@UaXG&Ql z7ZA=5#8CizWu;4Z8w&GnI;YTYBmFXoZ%x%znL3Q+h|QhMSM#?64YQbm9D zwN4atTKv~+Y*i&m7jjHq0T4dFBL2JLH^kXgFI!>KppZ`GFvSd?n;$IQ(hW({aMKP{YM< z+{oI3xqK6DvCR)ZdoAnwsGLh*awZMi@c$)nE+F51kXr~-q|7{u82b+d9Gl3n3xpAe zwkDd*{s$WFZlW6lZVdc|7=Uaf*|50hlz1MuYn?p#3l=1~9YT;bQT~P1-?QlG=xCUL zr-Sk#<2}df;xkVH-8z& zoyAC*wwT(1j4KadkD zwWdx>%(Eb2dBm&fC&rp|_GjXY`Rr}rcLpAlq%djv%8E_=AX|8qK>BW>`{@U}~`(BUBp`C`#*j^w5@L9)~MtnXSi#K0&IL$H` z_>I9{pPjanqixNAAA3L8VR9WSOwZd6YgR7|B}^%TT!-c(U;+;Il&g1O$xjx(TCf9y@KQga9y&aEs81GpJ_%nHheLUIAv_I?E!?;i6 zNUkL(g~$HY4jbd`<=UTJzuC*+v%MU98;KWMHJNefn$Nu3>#~o(JMo%0UQAx|H)$E< z)2W>Jn~FzWS^5 z>{eYbFi^~wSHHg$n*?${Mese=OLyY_Wm?j`jmw-wwThsaaBNGIrxnU@?@X- zQW6_rrW`vA%>N+4)$_!c4gIq`t~)%wyoC1*5q++TO=( zzbRJ>ar~IN`I?mW6Whpd_H=xY#BtlvKQ7mP^M&G{-x&-X_bw~>ab%YZdE4@9Lw}QD zZ?<>(RAu?D_1NHU}T#ku} zf#Mg(NZ}&mej({<;eM&z-`yB+W5A68HwN4oxCaI(NKmFQ6TUsE>ogPM_V4(8KDnC(3;&&tPabd^rgoA-f5q{&l zQNoyS6y~EH$1do9K?POKWwo7UQE)T)4V+9z!IoFp_w4r*jMiOMnV;9kKIrCD><tQNs=(22EN zcK3)8R-+D}aE2y82lz8HL%c>Xo*q4J8)ERRAv|MH!EidW~i zyW!9dC(AYP8Ktd7Cl<{yEd$GD9i~qi$8Y>>@-vQo&v@3&_L+QI41SpQNbo7?|NK~0 zwDRUF2IjGFW7V6Ok5+D08<9$_kO)JvaA--^kAaEhvd{UK$`TXkc$$j?2I9KHKxSzVn-*4`&-u7Td@&4W1LnlNRTM z!FscPUE9N0lb_EPyw-T(y9p+q?@7zBlvk!*w_sg#0lu0T2&hR(V#x@|pR` zlZXn_R>qUpn(r)=&nz=3-?93Re3D1ldOZ0PtPgX+!pE{sHnhNe40hgX;9|VtiFR6M zeWWx;7cp59df_}|VB%kf_^XM0hh>_2*~`(FuIcewO^A}&R>I&Kv|dMf{FeNCVqXx~ zoa32}by9g{%dYXP%kT$NFY7k=PJX;4oqGri=Ma`{aL4?_G3zxv7Ez#scqZ3zW93Qg zZ}JVMC%h&hGXL4u(YklPtH2@Mc=_w01L;KDcgK= z|Ftmiw^?B6e9A!vI#v3#X!CFE2e$>*--v8?Rc;LYXD~oH%x!^nXLpmuTcXIF-&|uj z$x~i2!mVpwesjn*NwQjtDSm@s=Te_*9#aP$1Sba<^INwuCHK`5J_rNrVxaF1KGOFG z1q=!?_CVN7dl+wrmG37{o>#vdbiAvMcmc2}+qErBZ-VPLwv%nM!kVro@^gBTxFIM~R z-!FH-hVo4=g$3_iSh)sQnC#z^YlHcoT)w-dPcALXVLXAf!*#bZOugo>YdR`DI1o%< z7<|zG3$OGpUD98VVltnhHJ0UC&fUs)#^d2mELvX`1pE*NQ$N4(=pdbW^VlKbWPZZH zu|q#wxe(7IU&M!jpZQ#2Wt=_S4X-8*(2)dIzH^+jZdX!xU_785Y@;1sQ!oEMC~PLL z9dC@YzbC?P;V&`IyA|FT#fz!SbO^0=DQbeUGpY~KUdgTrahlMkAA~PgAemgc#|y$@hmIJn8v#uM=Zl0l53A0 z9(&rm#k-b4e?W9p&tq}-o15`JK2kdF{AP?wNV*wBVY?UY08! z?P>4!&9px`9%b^o_O*%U-^BccGllwN;%0(H2Y0qp%d*Ku%x?no(~lK#RibzSJr-$j zYtkgvmz1Y!JQCT*fyrb4n_OG$^kvfCQ7=BY(!(Du%U-5wF8iO>Xrb^YN?g%}foq-2 zclY)t9V40+KL$oq7H__$3yLD}OPK@54^2GN+k@7Fi2LEsp67q@*|h&bEwKJ_1r`Yd z7Omo$p1Ys8z3BSy_-~=ubn4%OaJK^M@4>UX7B>d|TNrRFu>M>9&DPolSTp%P2o_xP zxV}F~S^vvv?RdOfJN~P?9YE! z`&{{q>-*mYhpFeEuHV4%cmI9ZcDv?xegC`L!}He!M@{e}uGn3i8v||(xG~_y zfExpUAqKen`Y=Ki1uy0|6Zik3AoeKGOFY_lO!>?}D>+)pF#OS7aZT+0xdQ|L7FxU4 zc)8cNI~wGUaAUxYf%{_MVdtp(R&bvLZoYFL1pQ5)O+T=@KO<*Y`4i=xe|kPPGSgp) zK5IToYEAa2>Qj88Ft>d3@EH9|6j+oyshIM~o>ESR@mlK?(yV1R90f=t6K2QC8C-9U z6Qq(Se`+~%4wg~rI5-}@F@Hx13MYhayY*OdafC&igda{MCfqHp`Tl4AUdK6i0+bd` z10O{o+&54r85NHv^Zn73{3xJvm*K{M8v||({PP(2Gr}PGznKr1|Id{1&$s;1LSO`9 z;>J9)1}d@c7wq`FU)qQL&Uw%hR35!x`&YNa&>GwDR|@C%!tuRm{a)V;+ReDRR~>iz z_E+QgZuS0C@&817t?`k_-~I>;eRb9NTT=o4;cW*z5lP^!%6DKe6MzVR=R6Rj00bWb>A`vS98L^6M{;OXRWcaM;=i zPGfMjYWQ`@;|-^JS9vblQk49gkxRu~8s02HSe3(AFf)$2BS(}rfzOOfjUUHGvVKo4 zt-a06hiq^ZC%6h8&g1Nb+7sfLFz|CRT=iYpJDps|73<9VFhSdh2A0g1L432N5h}-A z+x9T!yYsp+;KqO(0|o<}yy=(1@KY1-`j@^UnC^c){FOqHD{c&KUE}|)?|%k2e)P-q!TLkl41WGl;$#v%Z2n}5{Kun6 zC&~RM4c)E1h9_9G@bFEb#iZfOls)bB+Mn-M(;rE5x4e%cUhzkS{fS_Q-TwS1iuzMo zEZjdB?56+!RE3W?6JfFV>BFvC9x-75g5q4q(u0EZPtfCoz)1N1t-Y?W{Y}8R$H0S7 z&7ElrYuK3P*s!Q8MM%ZginK;SAU;G190G~xqg50y@a?)l6(rqAJ#O0M6) zZ8=a3`Q=P2UYS$N4V1^g^yWX`sVuq%rIB~$R8p?6hh$0z+}P%*Bx%um?7+i&Ps`E$ zk&-3q=DD{ z*Np);2L62*Fq1c(pWlm@Fddy(x;jb!_qFKX1CbrKgesY7;ok%7zZ?>s=Rtpe_0BKR zz;R%W2kVIGqe6|d4NeK=QI+g2=V38GMFjijK?CU|x&L?LrFNb`TIT!11ZJnjq$^*3 z*m55RrU%Wd_Nb$pu}w({D4J9DY>krJ8F(EuT8In=owVfA zJgf(iscAxn!2CA=gMLG~%tMQ-oS9Nfdng%m<<207cE?B>&y;d49u=~&2$~0ZZz1pR z6krgIS7&{i$o=ESz<&e-9Pb%0HaI%2T)HBI2DQUYEuPx?e|mySNJx-WsZ&eZG->{^ z-Y|kQ0k8``#LeZ)@wnaQjAYN2Nd;?@)}&(^{y!HPEvHXMVLr*M?XagaIJW08jdkTq zuI~n>dzE3z(zN)od>0Td`xookf+6WQJ6tPQ@7CLxGV|6W$AZFMifI?)?D<^NXgh2G z*xO~wh>niMwbzl7EvqLkP_eGaW;?BNEf`6=~3uZZF%wp=F>fq9D04Ogj5t zwwFjVXmc&s@!6i`4jkBF=e5`CH|*DIx_NsY-|a^bSrE&_ER}5gtg;A_fykEQA%P{5h zugPnVvp-vTtr)GF5rEf@QhOSEUi))$^%(r#xN%F?tlg_OLV4mAL#+atUHjFP$FfXd zyV&lv>-I_7bZI1Wri|v3_MaWrVV5mYWqk%JjFR3WY66{R9ZX6(=kwxp>C8esg_4dh8VB*_)EdMi;JW?B$qxl&02$ zrZ7fHQyVrOKp))Hd5l(Fb{Jjp$TAp`tH=6+Z;tP#9H!+n|C{F%C(cV0cs%*LiBn8C z(%S3bGxJ`!cv){F&7M88vn&gJu4DG@IAvKTBsYigoAP@6O@!Z~CBn)27*E`f9JLg9 zyCDVrb8C?n-6w@bKj4RX84}A(?)}cZuKBbO$IsoqB^RGuoV_g9=X<5U+c!fyd-sLP zsZ$rlCr@@~-0Flfno2OqZb+`T*liz%CbldISIZsCN_CJ-J5 zlgGT9xNYEDyd}`f%Yx0M(@c&Zi@uYiH6}q~St^v(iWc$J(ha`! zbNb6K6oeztVXP&Pq z%UAv^ACKrFk;h{tSH={Qa3h7xoIPB=8QEW=BH|y2IM!x(0DOtGqJE>m7 zOU{KxOTm1eGJV!?`Q)>%c)uu_)1{E2ei@`f5fA+zkO$7d5Ws(=St~yo_);t2$4iRj zPAk`;Eb@WnS9w@vRYdyI{#XE=zb?1arjsu}dr>}ouOD(=m0Be;NtuEkxH{LNNVn1`Gx$Fqz4ie<}2HlH&iHcxH&eHQR&V znlD$bSj?Y!j1Xr{XqK?CZTnFf`NJv*yH-Ayb+@uDA=m+hmEG|Ip~d+G)^-p0l9b`d zL%2|>LrG$_%@k+BZ3I6ivnu9a11Hn|@Y4o4dFp~@Gfq7D!Za*{ZRWEbSA5qr_%ZPm zA{lSK;er43|1H9a5PbBMyz{{#iFe?ZX-yqS=_tz*?=442ym(I%T|Tn@rifqI}p#tB?W; z-B>8Vhs@Kf=b49!3HBA09Ht(&C21WNBKaMO910PuuUUo(p<$=x&EZR>O6B~L6Ps;J z&cL#@OcQ}PQk)~}`<^Or)sRZh}GjAI)aZed66tMAvT zqL1&lZ#!^;x(u9*XRzai^ua)0Gj75bC|ay>$26?hD2_}$1fAuXpl~@}EO_ocKAF_i zPdwOZ&dQ%ibBZsdXPsOyMMcLc{V+e%TCiDVI6%-pCSPn^f_#U?|J(1)kdH>pmQTN! zD?{FyCSQKL5R0#PS+R1T96EAR^RO&~3o1MYzd27xa}2kChtd~77+Tdx^JD80!UVwd ziw#AxdFx^M7JQjuU(j(`yLP`mpN0bKr*WH{{MzI(c+f=nnLZQa_xL$|{T;BFz;wh7 zgULe}EjSGvhW{juPc9F6B5}w3+7>NWAeZY^Y%eOz19y1DIiZq}urVxIwp(V*+M>_= zG5HMaY%`zv-@tv~K)8H3Vln!~;%m%D`ap$FSnmZJ(=!kzwv90IuW2X$@>?QJS$##2 zoq14SZ0uFg>QX3K(n&y}+&Uh$Jbbg#CZz>COjaFetkn&p-gr*7bTdim;$V0pU# zd1xGSNu8QGW!=iNk~OmjG&eUT1@hlPgm-}b_e5ANfdLd0P002f$UsBbqdLvB@-;OxBy%r8`qV>UvKd$kO$UazeD+!0>=S4K}X|1m5YTXZ$Kuw zbQPM;8@FZOjy;H@qkWJ<))M#&YcFU%Jv}n$E*;-Ducv^q4F8);dRUU}-nI?TW&$iC z*`Sz9N8w3C27_bCmYr;;IDkb=e&JrpRq=A(HL(w9BGI?wt2d@FQ zK{^Hs+jLXLtqknx>}8ug{O*vKbWSnPnh`%H9Ty|aZ_1#sV!oNQ z{A+~E>tOI{(^^v}(^6nD>8WraY>cBo!+1VZ@kZE-1Z0;qJg3cIp~HGa8vJv%+rV-Q zWu!tGCb_{6cUet21_n)ppVW?>t8!%v$xkDFB@?VI7!3RdE@vGMTx%ly5Do@Yu6bu1 z+rszzmBF+oB;v-x0pmHxn{u7?m<;%9)nhFz_-xuuWkhNRjZomt?d=IGlT4bE{g?(D zEDS8uv^OcPta?+VNJ?jS%VX$_mJ2m1`$+q?HMM+IfH)dJ_!!v7Y^$l)^tpb-k7<*^ z9j!MQSV!3s*>q8vGe;JgI{rymgjju+239f*w5~DFR&^;5XVC!bG&p2hL!U6Z(|E=) zTsVJO8q~@sty@;JBJ?-09KM=z>}?{Qn0NEnq%(O;9~+nmqe$zyO&{$cWSW#pGPlXJ|PGzM0_oBV8_p-t0P zmd|H`YWR|K?AXR9%W#$rK45rUVt%WwrvDkw@Z-33GGuUTSnqf`^C$LU(!O<|OEP9i zE1lX`k<{QNbLVZ56DKdppn=VmhDbXZGp2=-(y~@H?POhEUfE>wFMXXnftH!(yMdkQ z7%XTLacjjA7l~h+HK{1|>Xz0|qZSQYn=9lohNcZHhPP`$ z0MgedlQXXuPGqEmg&%{VI|HMYKIyN)wV@||HR;VaSN?JMa0C+S1Ojtp;p%{z|1p-r!dZxm)I^NxA3c|vT5h8P$^TopuXGNI&;o8 zY1g^}3{NNZ(Q>OH=47-zensjVmax`W2JKJO7l2sEXGsl@c zhEH9&l7N#1SLBlqI-|d{Vs7Ea4BMuE+&_N+0~Y1|frNiN2}y;E6|3mWmo4SU1st0@ z6a-VzA{5?JNL(D_G0`dUTf}FPm`49Ae!v6OO6la$D^j6GNhuD+RSb^2{dUvfN zZ|)f>Su*4WF<%GqQK4h`pkh8Mehfi2Zdgs~Hyb3I4@7C4r4jdp^6HGdJh+*(XjTJd z+?09q*U6YsE2Vvxq0*{FJ>Vv#jQr#Y*}J!*40>sj)N4{g1`c=;gDab?TfYO7?*#G7 zmQAi+O~A1Mk#E1Bj>)MIjtT6RH{X~o>2hb0Ga)hZ$%v<BAeyScc4(KK1jw-SS-`09G5B6M?g5q zgPpSo?0~P4CG#W13szpyS8llnAG_Wi+!*+eV!#LyJ9ZwCkkClsk(I51q0+WZc`1u8iV|O+KHaePu-)7O{ z2DG$k)2h1c*cl8#{wxIG8`wP$1FtND<5xa1ZN?_>xGU1PcRdJR{+egq`u)9h(W%U2$jCmydVd2#e*=Ikx7^oWz^pKT(=iuxrHsCMl> zCX1KumPc7twM)xsSQIQ?vO_v`sHw+#4jm4ct=o=D zpPr4hj7^&l>VjkO(jaNnptw}7R2Vqh3K%X*&+av)TGiqzw5i~RwgqlG1dFpMERt@( zD&(*520ld{gmvJ&@-ex`0 z6}T-FLVpVMT}>%fvH)o8Hmu}sfG$$0Wx}E*+oV;?Di{Zz7(-`ZrLqYYGx1pLXP2k? zHUa&`VcuP@bV!P?@)2o4)hd+BzJ&qLmqyXgnsv zG01vOoQ#rJUTQ1p;e&#Ukt?8q-=?evZgC{dH=7(jdJ!%TEG5K+3zyNaYrrp}rBER+ z>DIL_aOEM376$?cSQKE4AH_nyLEU1~p*`pX3&<;1Z|YbkTfPkIk7+a3%i+T~x(tO& z_s8ofZyGm#xs)&KFXhV@R_?tD$9=i@^YzWCv_~0h)!M_-pk5KFSfMbi>vzcBpwsfq zQ}r-Diz(dfugO!^<7jjO#&AK5qgpE4&6u@8kECqcd;~{l66D$bjid;a_rFeDiA7AD zeD&>O(0EB{)Ucw=p0iPQ?}?CfSn&1iUPl*whOg>E4bV{`;qN$hRj8o1(oQ}_6!yewL>T@D^TEwR9No7Uyg#`3`Z6<8WdJ)xO=hF$nF;0sau6bHUvCn}M@1@ZuDh6Rh#MU{Rp#*cGOA)U91q zX^J<9T}`;D?PL=ZuHDoluC%UQurLrXHc?*8vC1*>c$YfLb2!$ya1Pvl82n&|)>#i_ zwro*V>2%ZP{TO@a!3VC%zWt}9S`~kcw+3?LNCd11w_+~LAj5`FQC=Sgi^>bYS>uKk zFoy=oMOf9v#$SWw&N1orL{0F251nt*XGjD7T~Fu8Q>P-)mJoTYQys-HkzyJ^smYwtDRz)VW`koz0t; z!8}(U^cn`b-6GdOzl|D{l%`E80VkG%f@6}wjL}oD^qf6+D=a=Q!D8xnjN#hK=g*zv zQStpscciE5z*T?n?t~A28_+Km{Zq-PL89jMrtig-p@IzP{Eww z$MtlcOE7PHdZdxlkoS6YZ-74bMExO{AEGh#L!|}ek+!XC=osL!WX^A= zPF<1`CGto&$S;J~j2-sh-hIcx1Ht3ae_mdm@=X6`kQY5bBfC_NYSO5J;_gSt81?Iv zlEQ_3Wx=AYput-TFJ*-RPd5U6#bUk>#KvMy>G4E;l{G0-5Vn&iFRE-*uTBy0x9Y0& zP@>sja+%?5J z{4?9<$ymZ5eUXzYJkaS!4bffSU6qBu2V(CUywKm zMx1d;ye3$3R)X$oL`BDg(WR7+-|Hn;kH;v}voyV1<@2w*%aDrxhmW z3NrNdC*{j;y2-V(D=|sF3QMj&QnhkP2>lIY#&7RS%l5^gyo$ge9R@+FGlaIHU@EO- z>6~}agzOR*e_a<@@$pxsLGxGSgZG}3GG&TEd36AJhDz7YO(A?h;O*QJ&-IZfOuVzF zMX$Pp8v||({FgCc_#ls}bnUVX$_XDVmK(_{Z!g2bZX*`|ShyAThSkApMH3g@<0sP! z)Y@_D-E%nv=Nt0Uz*cfR;*xL?$q)gde*Ff^teeV!#~)jU1)R4$_e>)hI(!w5bF2jq ztBZw*pM38)(n96Y$~DKFyqU_fgNLkR9xUUr&dYRxKj_7#^6p0~AV9A}8TF(}rTjP& zPK#6S(s9nR0%2{|q^!I@tg9+nX3X5EA1FLN-gT*3P`o^_rOcdnSoZ8Wrr#z_UL%_! z9KJEQ9h5x*awd`+H;H935rv}8omRlABAvYWd~=yTd!G#dcpm123b3-MARmlau8Iw_ zuz#vgLzLH6e*JAX7G)vg4{O`7Kni@|fnM(BJpzjaV>W#6qp5Dxg|*9glW;%Zo2GmN$m4Q(rq2G~=&ahZ6KM=CJJ_8oXRa8(mbWWUf>ab83$uGXp0#;5j^7>n| zF)vn^VQ+PT%YlOswnKC=@&1?Fu zLs%f+klxQs!hG)yB~lwK+ViXY5QllWWC>q+=glrqIOLbFzFVp|q@Sp5J0n1!k7I|t zk_!0x0YCIHRK02;T?lsSPy_Ydkb$pGky54nAWL+RGv_YjNZMje&W)=!t>)>1bHLM0 zoYp$@`!#prAqmBC5C*m@JR(Y!PM>~07Y6jVo?|! zIB`)GY<%Vz?9yq0Dn$GAY~ZvC;kSvCR-r8?W9UEBTC*J(g}+O9~tn{ z6t!B*lN*cZ$(vZc_UE*jJDiqqT{mQctA$@?G8123o`T{~5hq3#mm=gp%c7g(>md%PQk!P4EGsdWFqGE`_93N(yU3*UA6hH+ip(@M3Hx?_5p zsF2vaB}B6kzh+!$M3Ns%KAtjdEf(>iuoi12HER@;W5?rk?9t!MH={R0_Ds-RtFe(m zWmsk`O2Iv#+HltC}G zlriJCDc)#ZM~ey*xVWZ;1}!LOFFXRpfW_ku96T<2_CZk!YdHG?{N*7F&@WY$-;bRT z2*vz%Es9FQkH6lEi?51+PqdV&v-UxmvO@v_e5GvZJd)2Zhji~+M-?=O4xfUeGu+B| z;(~M@v>M8!f>2h~mL|Psqs%?>!gI|5lLt1R*J-*-I9@t)j&;m)8Ol9+?7V#Req6nS zdtFiU26|#AZEQ4ZY+H?Ot6^iE*lciOG;CwDv2jl9q_J%qH{bWW-*cbm{sDXTtUWVp z)|&m!J3yO-ykvT$FB8Uz6n%T8TQ{c^Bo>E1L-K}9#^fIeN>BsJ&b_lFF9&G65k?&$ zrf|)=U5dFaMm$x*uO-DAm4tzm*X5kTgvWXFO#7xr!zisq(Cl5`1J(YZIBlF}8-9y3 zqB7kiP9iCElQljRar#BbHwoN_7&}6p3&ZmLsl^V>?f#&Z7|Mcs&I_$9$`l$nevRRS z92o<~;yVo|E zDJSKQBkX3UiOvcJHGM4R*wc4^OetMJR%HIA3Xb0&^>oHMUq+O4mj&$zH%(dC_z#^m z)8i%{5j7{HTF&V|?AI+MxcoVmWgu|^R5g=W_H9j%dY@XH-htMWITSHQL+WwVn8?*h zm^?b)^WFz5>+eA!geM1>LMv0GFae@*chpN2+r}U2Qfq!~D4xA^8yLu@uus^24huAN znqSD~V@|*KB=(i<(5aB~?BR&$@K`~S%&LoMDonWhhh0GpV;!5j1`b=2!uh!_pjIHb z2IKP6uNeDt7(;^pj^kV`_^Oy$YA;q$a$}bqP>C4T-ti7Ig!UaI2dXlJpFoYqCLo}2mwiin^Pp@b-6x`=I$o5k@vC2 zzsKdalVk!@-0Sn)R-Ng!KT;POc0j_{zFrg@a|Cq5?$&nf9nfAn2xbmQHG0g5djFmmX$7SaX?VkXb3Lyg8h^IFhfXMWtI**T*#s78y6YSd)9Xyo zgAs+Ivn&gxvm%-pKZiX6e&qWFJnY~s`E0q4B%E19RSYW0JZv-$ucpTd)!osW8eFlN zW=@)e(7Gx-+s$86_LH&B1>L2B{+AVbV^OSi$-S7fLd$Stzk4DDp4>T-QxAKhKb=JQ zgEp)(=9>yvHixU{5@EkpL&`1$*P&y|h2fQ{Li@p2w@p~?X{MrGsneZ5D8K%dGi|aF z2@MrrNHGqP3eWYuRn*t{IdJqn6D!rS>+R-Os$uiEO0o}el6+vV;KA(_uQRV`j;}d< zLuwe+m#bg%$8XO6hq|}+yW0JiLJ^6l{iEavr@g>6VpyD7@^6_`kAxEiTr#nN-Ok7l z5`o`W1?%-tHSuN4UbPHsbzU|ny#rs_IW`6rQW@t}VVLJTNpuyN?5%sI8;pc?V3JiW zG)Ra!+7q2nf@j@#qxtHJfewk2wmmS?Kk&cWbqcgs^h(PYEY10mdnRi?AabNUq{5Y@ zqoF(!*)OSTufE@QTGD8coYxl`zva82D!+U65p zm<-R2K5Q!OPBulG;&md!@{rjWh=>x-u^{(MDBEhVpa)^R2+?Tm6X?0AeC3BO&po-& z^+ZSh5`G`yo@~Pb90KNR52fY0P4dnstxvFr?VAC+MQ4Ln-Sh-C16hh8{HfZTiMaAc zeACC{+|QKy^Edo>wV(79zfV|hW;=C0$RXL&j(pYZCHk4jj%>C2lUFW>n#7|dX&ff> zHhO|V%u5><<^E;5k)R@-M2_LyfFK(}*-~>C>>i{G+w=p5VLu0r0^dir@F!fMRq+>F zI!&llOeUfSQ8o|RWlt3GS92BIDQC{-(?Zg)&FH;kSTcbqxIIOkx!vh#XkRhqw!6@t z^?v)&utQeRzqIK>HhJLJSn@Bz0&gCIINOV>!nqS?-X21q z^=rgL#ar9VqfX7*d^X>ov!BP#c3tsOSaX0TT|Vdi85ta|`{OTrSseTX`@KmH)CHQ~ zP@&$Z;tZNspy}Gri>PgV+@<~cYJHYa?0b=_Wc#E}NbYYY4Xw&F?0S{_G(yP$`Q)b| z&LraQ6l0yj9-g6hr-+ln`|sZXh}ZqF-pcue#3Q0ZaY~m^t*pfb67NQvItOuT`InH` zv*Ha?o)emS7Kh~=blF<^o4?4X6TVjLb;A}UxY~Z+zF+t?fZ)L_WxsutS{Mx9?laI%GRaR&bG?Q-`C@36>+U#XqJbgMnIC^ANMcC@&8 z5&+4R;VZ61o!K`&1sPJf3ZtC@G|HlRJYShRsb?Dsbeu|^@ zzW3+w?ifKrj$E@(2ch#l`6aiFRkI2vUMZ!6qZTpRkqlP0jLJ?9J-**i$`fO_mcxh< zXCdokxtJ1M#@})WW(H)00~BJy2#{jiAWak9jkf1B^TZfkXG8){qkx|k^^)7~NC03-b6ljfLxnzs{J3H)*SZ%fr)eUF6m_Q!r1apcGlOTpZTwHeG9gqHNzC4jgxQx zxIT&Y4tq7_Wr^bJhf6}C}`p5K|sG1;X zfJ0O#hR=}PUS`>y*ynJexb#dCQtRKl4Y3Z`<@G$P{rr%FHhbwhdawp48Q~;_5{XlG z^945McU}8{ol^p-Vy7?;u#jpds-0h!TDcUrmo=+M1Ik3Wy<2|-bY9h&UsRo|4uK0t zl4^_&VQsj|{Sp(S$+@&E+P$w&%^T2`8qreGt??RdD9c z75g9#rxYNtxJ6#3=sWW39*^}gEp+}f;*&e(wvz$!xqeTV8>HG;_UTP`hz*46YD$jT z`3*-+opL~{`7nQFxJ3KzTazYd1`KrD<+HlgwxQE<**l578hkZ(^WDVn^U!H?D0Wk_ z4!P9~bg23pZ69*aA?ww<$8#$8c9FAgFNdp6n1m@zUC4!eqr&tT*rXzZO;SExn*Z%i zvTN%p4RDF;b<&woCf3IW94)CD4hYZi-`n0UHUCs7-emTI-oI&t9iP{K6--^~!XfJ8 zAM&-s&n?#p&m{I9KM+lGmite3NJzWJQi_}I{Qf!7pXq{~K0jcbCX&@17qm>W(&;oG z{5BU_kG?hGK987~uyr)PefgL^IZ~Lnvk@kI>30W7yOl(cmp*Czq$6wL^VeFXi>1pbsQeCPUb@O|CBEGA@$^B(#W;Dcg7Z z+PRVSMlUt^Qo=uWTjOls_o^}WYvP2bY1N6*`rGE}@fRx+vbYu)YFJ8~$>H(ZJ++ht z?6!k;D13}6=b{?Zj=3Xix$Dv3cv8SwW0Vk&Xsq=X`^}^iUirf z{7Vm(h%xFBGh{$S3}D{B5<{fWCyNa1ICSgX`qNWWXC%JkWYmZly$%JavqN4?4 z>r|XFk)jj%Y&JcFg&WJk{cDt?T4Caak1c=u%R28>uqKyBrIFXG&+6@uupyV?(3)>_ zfliFVgD7P={Sc{)og%rXlfx+u3TA&)3|$9fvYn{lc!7pE~`HYovY@73Vk8z@e#!nb&DbthpvG;fsA!g5W7FoZe}( zrE(OR7hftZB+3ztz>t^223IC&s%gjvI;JKYcTw$l>c;@O8JMHkq~ zoLzafupEdoPUP?mNQ5D16&ROg6~kp-$nn{-D{-qz3|P4^KKW*K3Q>plrU_uK;0K0g zV{7Mbe4$1Le4(~W$2)!IbSIUY)wOp{j_~@%ry+>RT3fC5=@(|GTW1ZN zWOukp!aSNE_y()7-X>rV3u;-+?c1-&`((F*SZulVN$1Oc7tED%Fp^ZI-f3SJm1dEG zepHLf@0Zu!9zsyGSpBgw#?t&|+vs1sXWfUXO#7gt9m(WUVX@Gi_bC z{G&FCF)k-j)C1L1G!xz@GHU-Aj&tYTm(vYBdkv7QPe+(k#=Va=At1HLvnw* z(&Z*-alYK?vl@KBz#EQj>ZlgQTCOMF{v6`+muCx6BuyIH+}Ral(=md}qGLJD6PHJ~t{A6oH!=or`xx6B?d+Vk;@^k3 zs<8zOq`^2idD;4An@N5Sb|kO?TH`U!J&e~0EjC)daI~{O^8d@-7oDlN*x%+RgUPP* z!|-<#2bm4D8dTyGK|X&^wi6s@M{WyvImWoN}bsC*{>6`Iyjb!o9BZ`;9| zo^0}I<27+nV0Wb2Qo;|sM6eHwmWt1b7HccMO%||;Z0*dBNU{2D>M|G;T36mZz8CGr za)0n>PTxI(hvbfiYMyYR0z@epvW(UPOCfm$r0PQtrIsTo^xEK*QaGb?nMnI-R_kU@ zS%Kstu)t^1@j)O{Z)l0;R9Lu+93D%^r$Xv^U=T?tv3t=9|KbOd?b}`86M`yB&>pNI z*sgiz5``|Wu@3nT2X=$-5j*i-;OzlKz^b9?5Cz23OU_h=(N;*v zkC-VzgL^{De2A2iEk9US0h1gMD687aERJfg-dQBbB!1IG!%tmA^~9HjABwqgdw? zCNyG)2Ft9ob{ry-F=*dXU73`U8YPFTFfE0U*z1C zS@R5@m@VVUD9UqyS8{2NAz@e~g+`sZ39v|I`89#pFblQHg-b82rQC5?ij9g`#s=M= zzuX*S@Uvl%w z-ouaExv*%rJs2~JMJNs6lfFLE&+^e1vKIkKVRrI0yllV0%?{P|^zkm_4<+fM)a}GA ze-Sm$r79MaTm4HeqcA${g=kajm@d`mwSGW`?4M?qFrohMYi<9%r80BD=%mBuS7SKt z1#8|cK+NjrnhmqKxNFv>a{l`Yr~`E!@?J20ki~e|)m6D0f-ftTjCEGP-OKk95;II> zVDG|PjWiclA~c1{=aX{(0(qyt8wq<_T++CE1K2u|DQ>z2c%Oj2dwoFdi^8$oAMNr^ zgRh(YM}LmMtYx#)cN6L$!!NnpLjJ%PL9g8b2J#`*vP5xQz(PYFr^N=ZDUeZH-GAP5 z{^ny0gT(U}9**}|;VViz?2d~oyT_M&huCu;Vk$Ajk3XJ^$SwDASnlJGZ=rm=F{L_Z zZO3k7agVnc2}YTTnD}ke=h$s~*~MY7WAgK}X&_qJZDrsouiQqh zat#@R`Kk2AoS%YK3vZRQ=%1MLBm&CycaxkffPhznatea%cyD40a%WTT#n}CToBUe6 z;$o<(%0K;17rcT%W>^5-UDo4sqoZ3kzh zRFv$=5r;~B?3MH@^*GJ18zxGJlwGx&aOX>?kK_4#S(UUS^h#zEuJ!W8;tkH)dnmk2 zx^qlBv-21oJ`ie8H(%OA6RG~CS8uew)#lwK-IpH!TG5TBPN!JkWNEx2&^S9}uH%3Md_7P%t^0X8yFc&s0rn^5oByA<^sF{IG0i z^b_ByDC@cqr%5ZTB13=@BmHkP&l^>w^op>a14~#y1+g0^`4i$cR$_df_r$DPkU3X z@w-5xneVH8i0bK9tX;SHG_W2TJT)!VJ>g*ny@B?<1IFVtbvtCyNJM2s+b;Q$!&0pJ1-(Ju zIFzYxr!HwaOTaN!@bN&Q%HENC6uZkqcKX3+ zpkh3O#lVuA*K*dVYn(ihR(qx;NAUeNy;CPEUe0y z6J*0IXDG1jziSr%{H^0{k#**Oh7L?}bd{MEKOJx>{xCu!Y~h zN}qLRU;gTJ9Odcirbl^gff;vXAnD3p_DErvl;8@CbRv7asc&ihJQj^0nyukMAZki4a0L4Yi2U~#?0)GEymZfJkc|K!j)cT>xlrR17lhK-Lg^Q+!(jEqm{XE6jiQ1OtE%97`@;n-&PXMQ>^DJv;s} z(6)9~%nna?aVg5Ql__nGe}tF`lUxDb@P9hwHA$lAQHx)hNV&h!3@>cA z_N6L?mp!RISsdNOE(Pt4D)(r6U^`u!#W7YZSn+&gDShv`H#tjzX^mG^) zVXctdNQt%lv&NBl9EPeygO14`X>elRz7Rp#cw&=1MRk!hl?*!;-Tz$jt)G9 z0R5kg>Z+om7F$g=Hxb-6bxf`S;meLet2sW(@w7SF6xs%QfM*AR9fcC9yTD-zk{*OI zEz4ejE9mU<2qIN+=i^rwsO`E%jF;B1-4Bd7<#O?CU-5nRokx1vAS1R=KJ)K1cN06qzw`vBOK>0dcN1k|9o%9v+pQWjLuTQksS3ysHPW!1c~cJ;I^7FK{TzW7BG?A=d%>X8@lUeiRA#rA`NsI32VO8)u-$t<* z!kG7gTosuau(eZm0sk=DVUf1h+FO0*R>v#t*_X}z4ih6mqI%abdIjc$?QwBhN}Kzw zze!?E7_#slvs$_ANXo#oew{4`py}a#=*}0A!&@*g%fX@@gFGA4DGPUE9hqw7B1_~x zneOpx_Qi$$oWRtbBB4~fbno?ASW7sM#g)~ zci5F?XCW7!blMqpq6dE*_?-}aOlBn^_P&du6G#m}d$M^fo(Lr=i4dNX5VyvD$*K?6 zE2}sV;VqUsz8~7bmPs9(aR!1xZM(Zx6Y5X@4BUxN))lAvbQf5>((&xmRI@vwMXQ|c zCJX>WzK&msFE%>NcWbRI2Q}07M#LAW1#Il3HEjwD4&uK1HZ6QMh+8L_Y2r)U@Qk7_ zFAsi7JE`wPqYU@xzW)*8;53@kL=vb#(pmnTO!l&t$w}PjYCxZgm%}6O(0Pm!xGHk+ zE2Wwdqd=$Gvu)+R8gy$Cnc~S(>T(*bSm^xEpByCUgy}hl@;b(@w}t^&%Ys|}{dN%L z)<$IxqMjRW2Nvs{Q=p9ebz*-|0xk_nkF3{zySdFMqGeZp;a0680yczaIHDB7EJGd+ zH*xKL7OyW+u?Sm}s5y_NNSItZ(`%FlrEZ^MTlY?5kR`uM!q@;%3# z$)#Z)k_BW(0=+te!$tB)-k-tiTrr}1DAi2x2QM((LGb33zbl{AH60Gf7ZgKRy8_lU z3j>$AzV3ICy~-&KP?+Zi{53jjxz$Pe{#}HMSBmGNB+g}VY`q*X;C%4@0#0iKus7P% zuW9?6+Z>-3m7DfmG=hG|@k(MW;Ug18QUV-~SD;@(;PcX8Yhvp3l5ffowueHVF7Xzt zBbvc>YMj_}sC}JpOHuZJ&3T?<=bXzZZY}nbiS^gHi1IfH>TMhgcO%`^RX#N>2;gNfwc0y6}Gjj#i zS1DES@riVW!c^)Zba_o0Y|CSxtjqN-Hza;v2-f?1WVZl&@C8HoC13CnzZ<8=p&(fF zz`eI8I{Nd|Wd;dRJSX7KBMJ-ndt;K|d#^&vea;vr3ehJY6Xg+9)<`#eV&NzMA8byp znCH%--s#cuM8=VE60240nZ+nVzby{e&p-2dM|M>hBBiw1+?ypXOPn>ID|+4ZjF8hC zgi7`GP1jn5LW|k(a(%x{+;_f`Y0d&3a@1Mea(nGucJ-BPN%20~AjKdG)2goWkMzGA zVF0R|l$cA#??KBnGV^hQkIObH2%bm$3V-v=i8 z{A2BYgrSiGl|1;Eh?3I~Pyoucy1BarO3X{M{JHx>$=c-jY1~wvsn(Sm z2z;;_?jp?yTrFiP0Y(<={QHS#;hr7j8`j_3aU6x-&8%B-g7)3mJqLb}xY|}k z*^pR*pYJpNShNO1LyMRQ%laC$o6IM;ku^!UxutvGx?@meb0no94=ZeY2%%} z+BY2-micjtCF?p`ew!VoCaLFnNGy<^APDkBmzmlz$Q7x~#i3M_))0w@9AtgvAVuq_ zUupQ!KUO1`)$ju~d)i+TeIWo_GfGUjC*Ai~BbWA7X847xX-sx^M7?DwXIFVMw~z0KmBQfcFMcorEMxViMv!*~cewE6sr3D~DkLFL$7t{G8~IC8G3ooiC29SbpCxh+mc8j*~0 zWyTk105zN_1mT_B+qt&e#-f8%wB>_$^hpcEm&)bv?cFa6==gKuWZS3&Ya3|o%BM(& z7^)S&tp{hb&xW0Ee_DXBUFurqc*^v(6YG2Y!Js}HO#UEOeSHEtBzw}H-mm4BTI|cZ zxHbG8xctLmrBgg^ORb_LnoQyg*DGL#8XewG3c;4c!q2%Ru@af8 z#dX%-B!h6wXP*=FJ>=9V*S_kcj%P0&;-^FcgT8@m^rO6-gKVErj>p-m0e)GH`CoS@ zTGjYNUb9aJoZ?!1S<*2yC%k{7!`76zNd0A9qNMcvwl-xSRG^3%({&w)QAS!j7NfVh zMV;w{xvcj%alOsS+(Rpe;KE3CUJ{-TC5z=R&@5I1-`LB}wst>ITJH8YtGW+c)2U3mV9j##q2C?K|q2ZY@OxltCvkDZ4%Rc`q9ltX5l)*f5hpZ9nxGdD|H>H?<0Bt4J*H9gh^NL^3i z5!%?$8b{%d;(Xj?ZQOEyJ~eE6e(QTQk2{WVZZqnUFN>*X%nGalCHxbZ0<*E|9RzA294?`<@BWFZ0}&4-9gf{QdoFA;DvZ6>%I(7RyD4 zS?>OQnAa6ao(RO=zgpLLTne$u`J`~WtrIuVGkJVlcIbqb5upnOcJ?dIu<+PrhBWPyCNJ{Hm@0Ej=S8 zqPD^ag42o8us(D{6EL3b`NaCnw48QF#OL5?_GX&4#(Al$ESEiPNqzco**5Cm>n}!U zey1ttxU|hNW;~S9>Z-s%M<>>W2KKEQO4XHb=XC?1(4sV=*;C6#QKuJVmACe=bhIND zLn;!C{7egQ0>MSMTrRtFss}0wp90pY+h%GWA}?o^vYY=xk+sfHP-C-9Y+~m>pTPyD z0089&_b@f6^@x*?8_mbVgfg+a|71PeEmj&ENw-o67BtcCQx{Z}hnC=+(7|hdy(a&< zQ_^{r+&=^OC9flI;y*1!(#!ny_yY&lr|cD?X2}RNijs7TP7{orl(VGIS(fv~2#{SJ z&%V~0-aW7`4X1bzjLi6VG8AS^#Ahp6QKA1U{MkDykkrkH)PtBlPbspdJ1$5qCoAqM zRL&=v$DCFJngVUUC7}IeO(ooi(czCd6*TxO2QZNoH4@#HWm)^WQ=^x4QfpR>g{RF( zT)x&FOl9P~?3LfK~pEaUKY=Dd=7dibji2yzT)TyHDp zGTpQ7J)OAo!Sc^z*q(7#yO+=QAw8Q2N2gmZUD{qeCs-HEEMEoPyWO#l6hE#T6Hes( zvN`aN!$3H4J-hjpKWDJ`>za~j$+q=&T-oAfS-aG>^!K`&Z}>9aE6rPV$1jiPLU*o> zNFg$b5K&s?JMYK8=Y_PhOz-|f__6b9Bzjj?UwqPE*Mt-}YF?Wmf8ly+&Lw3o+`{=c zHol$13^>N@w3hapSuo&=fP`K{+AnjX-8aYhU29FVvO#AJ0kS?V#m)iTj}30_|6Nk% z&Ddi`&0f{r!<`TK_0V0h1Km&LAt(33toPsPJ@ zJn8k+aCaZwll#$`*F~eay)#9=Ul{e=21OG(P~Ads#m|P##to@gbwkRThZL=&Fj3a5%{u=#-@o1oJxtJ4;e!Z zW*K(P_NV0m<6sjiAq=xc=r-uh%UaCUMQyeFS-J1hC!A(Hc6hUQ?2UM`fz=TWkT@LU zKkoACPPdrv3!mu9#7SYhf+aTp0WQi!m!NGNiH?~F1{Mxa;HgA7VK+2!d&>(+KJ5ca zq%G5C z5{tkhv0Pxz_~bm@U4F@PPqQLezt9f+xIt^5-SG@KmX!6m#eu1 z->jyW&kwDvr*azzaszJuH9xS~d|vUaHoY)O_aXIlkTbs${U~Kh_VxdWg1@$=i<9ju zf8?<5b91{XuAfoCcuD8<-Sac|GrUO$3uXHdCQ3KFX891R(*OgKO85evYMB%sTk;C? z-E^u+6=_wbbDbFp6>lvJlICTUGpy7}g^$U$2t|tO*E4yGepZxUnj75LWj3UKS5|){ z_*W8!EB<9?s<=~Aw$^o=w1-@uWD@;**$Bvs4ddFbiiXVRjV9+C7$g+qAA26l6ytV~ z4%&3KvrCtopIm?Q|K-^}&8Fyjh{v?X2oe!cCvD!Rf~&>{ZQwBf3b#4+<=nLtpAe2-b6t_$pMoj=m-R)nF}dNyQ5E738kuNjSRIXvjYpE|TQ zeo`JTojh7No9wKW4)-&??icH|T{Y$TVMR^ud_dPzb7zF&B@-Rr{7mxV&TmOW5iwps zklG*($%u?qig^HOUCwhF=#tahoRlWZ`A{L}o7qJ2Ku(-LzgEi@NA~X-e6V+O@99h9 zb$3qq{Y!mXU-J4m*33L-i0jy#xu&<$b^jlb#g5SX!O7#*;=}TFp-8q*XUwr#N_b}L zMUZKDqX5$rkseJ2UF_}Z<_8_luMqZ!QExVpdw$l@DA^AW-kl>RITT+t);Wq0dv7_6coE zr5jeRI8hRJBCQ^ECo*EZ&=Ug2r zEV&u9J=D;;U^d4h3Q^fp=dcvB^>{O2^mQr^<6*N4E*{(hLCx z2#Zcjpg(=sA$9pfo7?68rLg1=pCSxIyp<}7#f>BrHVRmlX|?-*&=?yF#DDN*g3>z$z03a!M{ z9i+b0)XVv7UM|==nVQU9x}f;ArJsj4&g2; zp_yjLGavumMe6j@>*|R8k$v&@iogd@WW%X@Gq4XT0%pur6mM?~;nl`>OzAZtwf#wm z;Ht}@X+5c0Bn@c3{?rl~aB=amk15~1Z|r*fyg%kO;i|4Dd~!E%H4`A__5Ij004VkB z*T}B>KdYc2{M)Qfi#6fOsq26LF%G<%y|Bq+=(Ztm>C)q9td}4t-*WyJr}BTV4|?Z9 zFX@2QII6A_eJh{4-+wC4pnWxH7jbE>r+KGr8qaOBduQ-F4k#oII9uCEUi(lv=-nNi zm@p8oJ!-n30ZIaYB+^M*5?*Fq?6g2$S|m^%wZIUHf!Ut>3g74_%XE?WUJgwr^4c2n zG7Ng$ZP(g)*3*A*G9M^T<$)jxxbN0(chx&5w_KU}0oWI3Ag!D(wJxWlqyK#!bcFx> zT;#<@C&mn%L*CHjQzEp(lS=9FOUzcM_@L0bk_V-tj33`)&515tN>{v2(FN<8{_Z@= zOw@~-Wv1MX2S5E#yvHac$Zq&QQBJ&0RJ0WG6EU^U6@ICRrV|AU7kdExQNUlI4 z8&BZ+0kn-5@^j_Hk6L8w;In+`1MLqc7V2{fz5bHRH+sJ8zFK^5Dil0@%zWaYex>6o zIy5NI`%@dBq_ueJtk}E?@|rq5x7w9{2d-sOlxxvmX<3dLQ6_a6SKYr*7@r&x!Z?}V z?{~E2gM{LctTfuXgeos-*O7`U4V%=3AFR>0^h@>WL9$j|zh1J+|KrX7Th)L3tJ`rR zNMa4y;gl)ySFQFRe$Sz!!oq2*2Obx2I$#l{qc>McD3f01BD#3h%j<9A)l~=kk8cFN zjECiF0JFvr=3kh6!2ij+h}Z*&LE$vl%C3F_IHmR0cEfDHt0R#xcqMhoD(kuJEwbj* zfr>a$8NPl^h%#nQA*vEW!c?iu>+Nh>oXJsWIdxOS@r2H#rH(Qv)?e68e_5^Ou&n$X zAmT{iXJ?EyJj|TfjK1lu><#8hb5u7}s7O8jF+80NE(`GTO7Xo~6mM}^(Yd_6RU;qE zVWHzGv>A?Aao_iocRqBy+7}|RnYOUNk+-n;yXK>UIWohKltwy6vhwHg%V;*~cBad( z^724bwSNcaG)=3MlYxzQ@%GCz7BhR;Ef+85T*B9RRKzBn1=hDoSNPszX#*FKlonU# z|G(QkjPW`R0&rF7F~|~x9-pZM=jD;>j&_%;Q36cic&8eRDxvK8GO+0=J$Ko|Zc(Cm zr~VT=|BW?_UZ`L)3yTzFVhup|-~>xTj?k9Ik>!3B>gvkDbYb@K!jslfZgN&3xs>Gc zr%EXq8FFs!vVz7cQngmGBW)cGnl;uUeEfsr32JJb#H>V0`(=3fXOGXwzMry|vXiOj z=Kf-mk--?5HC`MTBH&)5?H3#Ofhi?$^vmm#;&w9=VUx} zhz4Z7_GoCR&vf~KWvW+ zv99iKFCAdB(lJJqiN?#KH}juSR|nT68$C~x#Wx4S)}aQ=2yjQPCXwB^FR90-IVFF z*SZ3o|CIuA0UVoOhEUO^&8G~cxa?=Y)Asbtf9d2yid#=ao12^4+B_@`>~TzB2_l*I z+WZrHwN+k^-A~6*9&aSHy|a4BVe$Brq)vzph2B7x-C6|?&d?~p^_TC-|B z4_RE&5&&9_%%2jlyE*Z|eIfHckzZ_KkjG_Q3v#?QIz%S_Xd&&CUNJ)-d-k2xMOK#-oBLGznA!NdEpH(ZM*aLU-2JCeJBsh zp&No@i@}ZYjbf1R>zJC?ao07KmGW(N|wzU)J+iFWDlAv~CyY%;SJ)-7OS&i89+jDq5=%BFBl;93g?hSpxl?r*cr(l95Qt z#-E1yl(g7XE2DH~Wg(Bxb{z17BOjy^7b+hkbi+9`zLessDS+M2uo*5-LjZM!BQ?K; zEc(DyhwHT8%*@0oGBk^)d1IEl9D`%{i+HF?d;#q*U)PoO86@CUhX?7;2hE=b4{51o z72Ha)0@l7#8ygrz<*VeIMt;+SU4x=#Z!;#BDg_C)1nd<{$X$cFE0K> zsD5V?VLT-=(jx5GIhaH6H1t*2NR%7Cnd&g6>&%C zW>)a=DT$!~t61}}JRxIUK}?)vymARf38#^H0>&NiocKn^DZxE8Xl8C3v&BSvgMrBqZ5m3M!Qgg>GZ2IHTtpYd2Yd zaUXgsA^{`7f{9JH-=IFRQV@{Wai9Q9jtLXFcRS z?q$u*tAqmHdV1beUJly}>s&38kds?1MfqRD6s(kL^EKAfZDfOqXEaXI;B(BxSLcz6 z-w0uG?uwMjII=!PYleo0SBqD{AsW7gTm{=G{nK2Y@CEg^1lmf}NMtlIUwj;AYop@> z!%L!B?)xsT*Rxmpf)=!=>l%eAD%IlyCw={?N*;Q=l*nc739v+8;Hc8i+oGlAR&o!5 zLj)~*27_J~YJff$Er#vl06n}wall{$d@yqgUsyck5|99=vn0j)rDb_MEnZEQ;_>01 z)#-k!_n2HQ!GDT#YLu+ZVX?4_zkgK_+!+KwwSv1M{({IT(XD?}Pib~`A!&=3V4IfX zCf_#`=log+)C0dCER{Nia*rc%WFBfL?L~JbHVd0>BAk|G8SMHCyk#g+OD3Ey4D)mCR z*E*{lrL6j^sq@zWa7{(a+KTww9K(V%wAd_h7e`Nup%X%yauG2QD6hJIjAEC}Y5yJ{ zX585*S4K|7hreK%mCrj$C8PCSU1M=QzA3dIhsnnubwc)mE${FLb&hw1LNq3d@KRM> zl8nBzON-J=1FX?;b7cgG?TndYM=_7%G@9MD5&FvYp1*g?VV)7~P_P0dj~CJt5|hY@7s|JJlZ^ zOGwrSStu({FPJo?3Il*HjEcgXk#7^s3)4e}na;Lbr9auKj`w)muy;MK6}MlyC@#N8 zA*nuYu(F+;q)F1ed{wIIv~PjN08*Y-aZpAKw@Yc}_I{m3SZ4Gnscs%KFWCNmkAzoU z-9o4|D}i+`BWA_0b3Z{x?tyGoAn<4RyMNmNzY27^_yt35Vhli+nj(!uZQ~M9twJ&Z z6d?}4@l$iqUC%6pPb;nc{D@LjRH3TyMRN)|npjGh4q#XP=hgj_@B0$<`xag75D9+e zl$0l9!z4dgnE-l`Zqr1 zS2$KnZLR_rnGGk9->11tI)aGonWxdLMM0D~DEq}`E`)6S_EYTTxLt{+(Y#OYpI!h@A-OmQi%Z@MZtyL69J=OiRp%14 z@rKbC(bIQ4FLs;OKjKsHd`bQI9i3vViS&w}0REhBYZ)77`b9u%!eJ>V>-h26=EJ&-m z@mIN+b|x!Y>Ccc-c70Mua}vwb)6ex8kG!u)mW*aE>v4N-6x2D50ndgrTgr7R`>IbL3_KEZ};xrmQ$H8E-F_iK;r; zH04XgW4DRzfGNa$m}QwD&r0JKHk1B11(qd0Q2Sw(uu8liX66r?daj>Xwr3xc> zNP#GWcAmo(`Zt+=*(8i^RVS6sFY!lOXJ>J+xsE};yoVRYsI3wwXRS#_;mza4iR$du zR!iZ!x+M)X`k&$y{a}p>rDhu~E@nD+lG?-5+4o!1DF0yZJ^olu>vu`eK3oxYc|4q#k-7MUHKfJ1JfU%EJ&C? z=@mQcRyM#w#>fa(5-r3hC68|2LMF^>cI0yxR6#?*Kvlm48V5s$ZfW?4AB23}{khl( zRhTD$BqIeykSg1xVlPZe1N1F<)Ynv-~N>$BD-rBda&Isi(y?KOv!vV|{Da zm)D&P65u9Ab4!q!l)+6mR6B1;5xIBu7j-7f&X>c!fM>1;J|;Oj4CDsH7s@-7*Hlsh zPHDnZ!@B=9?}x{a*9aEKA9!l#ENUB2+|~Gl+z4*me?dx3t)@b~6DDW)m+Q6fo$_2E zD5b?WZ9^}xDMF$RZm>Kr-xgA))i7*?ZAH$YLp+B*e0%O&NhX2yU5QfWS<#ngUw9UI zKM4pAk_v8sz61atj;9VJ;n?a*0yzNEE5~(5^xSXTPUUM=Y%T^o8`2h4%aWybpB9n6 z#LrlolOuGYeFMVvTQrfatWCHlhI81{PbLV>m0VITCc6v((K7#MDl@@yF`{Y%;GiwX zYI>d#vM)P_`^Lpnfw`~UaJa6*3v)@qD zTP8qJRY*+0|fEcmp~Js9E) ziYh9o*0Nm@!Hu_w=$3JVqJ$@3{&%>A2b<`q@9M(6`#>}`*P{)MJj!+m@cD#~+D6X$q4e?fXH4U0q7s4NKx9_$Sadt@1K0cg8RbhJ?NC5_@BuOst zM>t@#%T3sI&m|kU;9SJqFAn)%ix@a4kA9~{nX6y~K8aZ3R z-eOQn#)^x8c2xZ3(iWxVfCyFfBU~KBH@5;hEhHNHfo?rt{vbtsN46L7vr6*Y>9 zKzJywsXhCg&%|d)!`JH92YHZxA{!xzdwmKVGjR`C#PqIOg`c6IHN?O(e&scmQ;M~B z10um8%J;vfu4u`! zT|%?89$v@CNeFvoZ+*l&@5h+k;^rM>CzGSNfk|97L$w$$O)(tK*%sWZF;fpnYk8eN z@1P_OEYOE0=}Hu^=mEWO<5Y#NOB02HUQFLH7fON3;>9%;^`xGEV9ay}YdLK&u~B-& zV{CluCyc-Le!DOYKB<{31~Q0ad&aDBk|^EQcZ&9gNtVvFg_A#xh_sphAzd15+mK> zgA$Wb#!{b8wYlUCXel zI-x`>;F59L=MEmGSp~Jh&9O534uZ~T2d3p)e3oDt@L$@t{U%3E5rBqYYa-8(vF zTZ7F6t4eDdWjmTOk!u&nqogb;FHQj)4$e?tu3oE752|WC(IkWVokUFP2)xuMiC~fV z54A2BFXq$1CD&dlT)#e8k;+Kmj4v!xaS& zq+E8}0UtP0*y@RRfN(pB=95{MtKUv|z#I9j$xmJ&*S0wx>n9A|hhx^Jxa1SCF|G5B z!LfgQk5f8ek*B#oe8)Z{U5#!p7MXCHI(H}Ybs&&Ge#&y%8Ue;_v^UvE9pPpJULH6e zDb|}|QfRO~{+t~A9e&Bh@t+s6f5X{du-FU$;oC^QF|X!53<#Ba#EmG#k&hBbEq~&Y z+R;w!P(y@Esp-6ZRLz_aX9z&dzp-o=Dmm1z^v6*;vha+NKTC@eKl!M?9tp%0DK_Ou zD$4gSuk;Ti!ZTPYV{4IEG}|15cDAc(aOME~>*ejgnEmaL-$W4+&;zYjJIQG+)-@o* zD5MwpyD~e_MZDt|m(RK{vA}@qC~i;Fw{l<~?0e0)3qSX9>+H4Lw7eH3>pWgaT}|eG zx!&};7g`Ci5qCI`-^qS~b9Cj@^Zlt4Yi@G%W+rKT zt7>7~JD0h8@)3zCMr!-;9A7-v1|u$a0qzU9!&B$D^2_yUl4KVH0sp}j=Jwu!RYE|3 zQ(Sy>pj5eXQSCyrx;icfmi`^;P3w8^=S9M9DWRtX~5FnMwAXMzuCT!mH2wf#K`%z2Bdwq7!G~B}?X5qS*_+<3iH*I`hl21^pOp!}( zF2!nm3gmkBfJaP>&kspuyYEVa#qa+Qne|3zscCtRM zi%QKU2pL|L6wQMhNOX5Ph(&2PkilkC-$RD(A4o=)ON%H`+=@4J z5!lF0u}HpG^#DrP$>`&uPz<;rTh9~^a$3KRAMR<+IS-?H_?~ZGfbRs*)Dyj zx%R9CZcV?ka^!p(fWXc3RXv>xAB&YlfM<+p>-HRyZ33q<7)5Ij>4BMaWiOGe>+@{$ z{&z!>lATQiLG?pJ+*m=XaQ|V60G6&Y^R~O-9;AAIn^3qxNC_Q3BSJ^PkrNZ zep{a{;NgpDUtTO(H68cV2iGr3oJTURyNd39nO7f>jWf5Nk#5GB8Ru?$)ICe&4~btK zvpD~C4g1&b_U--&28-n*+%pCjv@EDU4q5CT-i^ms^hc|AVT@`TF5XbosaO8!(|)DU zA8_tI=Jwq@6ug&00)E8YXCV&noaJIg9teeBOc8-=S894=7Eb?x4VKg09YUb9pb1kC z$_WLo-Vg`K_IA698c5KyKr~v0-u9BB{)j7RuiwAWYE7>7vS=1ukX=nr6+z8BOG_z~ zL-|OhoWU7&vJCE?;+u0T8U9X6Rc~kCkc`3=CGz^{G5)N=*C#P$Ss`Q2ZZaqlVdz=1UqS5Nay?GlRhRq3lg- zX{bX(x9HYl5Cm5Ed=)8tYF4M`BoF0K1wX0a=0tSbF2)t}CnA!bGIAIzz=ti4DyEUT zA9>{P0zOIws{-|doen%YVHLzK)_`V4C*#&GajErldlls6Nj~13f*sZUC88s77x5Uz z^^iMpy(*{_>n2)C@_(-IWFUjXhlQl@w`%3`Ly`xMMmB#)>$rV7OW8k-!u;+46}%Fb z`^tAVfjRA1N*kdx3$LLoXg;2Z-F!%Eb}N-2y(5S*UV)dKA=+c^0yCQmu&Uaat2G4s z?)TA7%*m;{>G1~jEb8Bk8>g#5mld3vtumUS`!AkS4VzxDos;)?nzx-P2c-I2*IoOz zGM_^4&^XT}w;9xxYnqRCxer9x5#aLRhODcE=Anf26+flnI zHOzJ>(Ke(~aMLW1zWWo*mN^~n81bh*`q%U5C{0D;Mf-RGE*4g!le@91dEj>=T0GyN zD&cWua?Qh2n|u=}^A6^hS;0FH?YYCw*V(N$tDrB^fiS&-CMgZ+X!1uct%8KE8`cMM z;ZEm#uL`m=nPR6Jq=t@0>c`LR+t1NJadkY7CQe!4LtV2U(v;gRC}MGN$A@%w7aj*i zPqzoP=}%%3sH|;iE;(>h(f?Dm;$y!(lLIL=fl0sg-I7>>G2Vj2NwskQ*MgXWL7~ih zpJ0jC68_!c)j$CnIa*O5Mk)#84U`1Piq!lR4A*2__Zd}(Pr zo{J)(z7e-U&qm5V%Sg&z5FwYyBCzL&hi!B`qP$K~GifE8K*p)RPS)-ou#hac0l(+m z8Z2LB@+LQuV_ye1gD@!EF}{3kE-gU0#=L7;fO@$|&)EFDgw3&wFDvLo-TP^7-tpNO z(+@IqjY-Q=G*Yo-TD!Q!R#8$fcFj#Un=p^BJ(&b5K4)W9$s8LCyVN_s?C%1Izr+RC z z+@jtH)0>jTuc|bSf4dd(+zluAKJn&SfTvRtwPLe6h_&ams5G6E$ERuF5*r9qmfu2q zQ3of@3lC?(?WM2~n9!W)-HuY;CA7NE)l23n?P;c`$x~<}{TaP=3QPlp(<7jf4(3{Z zED#=kSHmT;nqYf0r_Z_tmonl~ENYmL5ErkO;~gsYB)8Tv(;6`Bl-5$DI}9eTqbd}b zt1riV>G??=QyS01L^~ct^^w|aov`z=w$eIBq7S?}tT5cXI%zIi#Nf2Yz1CIxp+55~ zA+PPs#p9|JJ zR#jk+@snPK6tF|1E=Px^n~(7lkkHUpJ3227KAYNH>Bic{1ladU2{TBs{ zl_QICZ+^GU%|Vu+_vxP4&H}jB*waRN=>O~je@WWy$`4xVX;Bvb(a+e(1#werKl?%! z#>>|Wc2ybs#QQE|-F+Y!dX7T0GWeiym9|gh`|l0S)>Dff{+Q4J`Lfiw!gv`W1_99o z@EZsK1iHk)3fl@4F~JmwqXPboY5sfWF5?R+mW>Q)9sqs?It(gDow-t4b}w#KR+t36pp$#VieP!_T7~DBOiM zOZb!HSwYP72Mb(U9YbW|zPNv)r<9c|1^0fzy~9+R@J=MqpFePU{Z^&=5r@$xHU0C^ znf1ZI8I3EEFc}&up}jiHWZ~l#c|O*rs1u{gxPLLj-lgxFUcF^Z6%ijs_{bPZn8m~3 zWs>__Dt99L>Rjv;IQ&{kVt-dGTz7uL1_22`2ly&KRxUaW5czps-hNOScu;rSczJuR zX%?ANotfnD7mxY3!u6l?SI=%c2atLjYmOA1v%RgoLp96IBOv3s8CRmwz1ei7tx_qe zk~|4F)6+;?2D-gc)}mS

w@9Iu;{}V092P(-bKU7p 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 Date: Tue, 7 Oct 2025 17:18:20 +0200 Subject: [PATCH 2/4] update scaling strategy guide --- .../guide.en-gb.md | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md index 27d4568f91d..fabe7d8acdb 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md @@ -57,7 +57,7 @@ The minimum number of replicas is **1** and the maximum is **10**. >> >> ```bash >> ovhai app run /: \ ->> --replicas 2 +>> --replicas 2 \ >> -- >> ``` >> @@ -128,18 +128,6 @@ For advanced scenarios, you can define **custom metrics** to drive autoscaling d | `--auto-custom-target-value` | Target value for metric to scale on. | | `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -> [!example] -> Scaling based on a custom metric from an internal endpoint: -> -> ```bash -> ovhai app run /: \ -> --auto-custom-api-url http://:6000/metrics \ -> --auto-custom-value-location foo.bar \ -> --auto-custom-target-value 42 \ -> --auto-custom-metric-format JSON -> ``` - - **Example**: Scaling based on a custom metric from an internal endpoint: From 5cb0dfbf86a0df60ebf76ab2afedb65f211953e8 Mon Sep 17 00:00:00 2001 From: MathieuBsqt Date: Wed, 8 Oct 2025 11:19:27 +0200 Subject: [PATCH 3/4] add precision on when use custom metrics --- .../deploy_guide_04_scaling_strategies/guide.en-gb.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md index fabe7d8acdb..4e77ef1ea43 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md @@ -114,6 +114,8 @@ Using this strategy, it is possible to choose: ## Advanced: Custom Metrics for Autoscaling +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. ### Required Parameter From 07993d76acf422e50946991c3090901cf519adfe Mon Sep 17 00:00:00 2001 From: Yoann Cosse Date: Wed, 8 Oct 2025 13:33:18 +0200 Subject: [PATCH 4/4] Proofreading & duplication --- .../guide.de-de.md | 173 ++++++++++++++---- .../guide.en-asia.md | 171 +++++++++++++---- .../guide.en-au.md | 171 +++++++++++++---- .../guide.en-ca.md | 171 +++++++++++++---- .../guide.en-gb.md | 34 ++-- .../guide.en-ie.md | 171 +++++++++++++---- .../guide.en-sg.md | 171 +++++++++++++---- .../guide.en-us.md | 171 +++++++++++++---- .../guide.es-es.md | 173 ++++++++++++++---- .../guide.es-us.md | 173 ++++++++++++++---- .../guide.fr-ca.md | 173 ++++++++++++++---- .../guide.fr-fr.md | 173 ++++++++++++++---- .../guide.it-it.md | 173 ++++++++++++++---- .../guide.pl-pl.md | 173 ++++++++++++++---- .../guide.pt-pt.md | 173 ++++++++++++++---- 15 files changed, 1887 insertions(+), 557 deletions(-) diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.de-de.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.de-de.md index 0e9245d3044..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.de-de.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.de-de.md @@ -1,78 +1,175 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example -We will use the following example: +We will use the following example: In case an app is based on the `AI1-1-CPU` flavor with a resource size of 2 (i.e. **2 CPUs**), this means that each replica of the application will be entitled to **2 vCores** and **8GiB RAM**. @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-asia.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-asia.md index db40c1e89eb..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-asia.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-asia.md @@ -1,74 +1,171 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-au.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-au.md index db40c1e89eb..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-au.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-au.md @@ -1,74 +1,171 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-ca.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-ca.md index db40c1e89eb..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-ca.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-ca.md @@ -1,74 +1,171 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md index 4e77ef1ea43..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-gb.md @@ -1,7 +1,7 @@ --- title: AI Deploy - Scaling strategies excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them -updated: 2025-10-07 +updated: 2025-10-08 --- > [!primary] @@ -36,9 +36,9 @@ The minimum number of replicas is **1** and the maximum is **10**. > > For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -### When to Choose Static Scaling +### When to choose Static Scaling? -- You have **predictable, consistent workload**. +- You have **predictable, consistent workloads**. - You prefer **fixed, predictable costs** with no unexpected resource usage spikes. - Your use case requires **minimal latency**, as replicas are always active. @@ -53,7 +53,7 @@ The minimum number of replicas is **1** and the maximum is **10**. >> > **Using ovhai CLI** >> ->> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: >> >> ```bash >> ovhai app run /: \ @@ -72,19 +72,19 @@ Autoscaling dynamically adjusts the number of application replicas based on **re Using this strategy, it is possible to choose: -| Parameter | Description | -|---------------------------|-----------------------------------------------------------------------------| -| **Minimum Replicas** | Lowest number of running replicas. | -| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | -| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | -| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | -> [!primary] +> [!primary] > > Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -### When to Choose Autoscaling +### When to Choose Autoscaling? - Your app has **irregular or fluctuating** inference/load patterns. - You want to **scale cost-effectively** with actual usage. @@ -97,7 +97,7 @@ Using this strategy, it is possible to choose: >> >> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. >> ->> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} >> > **Using ovhai CLI** >> @@ -110,7 +110,7 @@ Using this strategy, it is possible to choose: >> --auto-resource-type CPU \ >> --auto-resource-usage-threshold 75 >> ``` ->> +>> ## Advanced: Custom Metrics for Autoscaling @@ -120,13 +120,13 @@ For advanced scenarios, you can define **custom metrics** to drive autoscaling d ### Required Parameter -- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. Specific `` placeholder can be given whenever metrics API is served by the deployed app itself. +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. ### Optional Parameters | Parameter | Description | |--------------------------------|-----------------------------------------------------------------------------| -| `--auto-custom-value-location` | Specifies where in the API response payload the metric value is located. This value is format specific. See valueLocation from parameter list in [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | | `--auto-custom-target-value` | Target value for metric to scale on. | | `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | @@ -191,7 +191,7 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> Total deployment price for **autoscaling apps** are calculated based on the **minimum number of replicas**, **but** cost can **increase** during scaling. +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. ## Conclusion diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-ie.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-ie.md index db40c1e89eb..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-ie.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-ie.md @@ -1,74 +1,171 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-sg.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-sg.md index db40c1e89eb..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-sg.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-sg.md @@ -1,74 +1,171 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-us.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-us.md index db40c1e89eb..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-us.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.en-us.md @@ -1,74 +1,171 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.es-es.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.es-es.md index 0e9245d3044..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.es-es.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.es-es.md @@ -1,78 +1,175 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example -We will use the following example: +We will use the following example: In case an app is based on the `AI1-1-CPU` flavor with a resource size of 2 (i.e. **2 CPUs**), this means that each replica of the application will be entitled to **2 vCores** and **8GiB RAM**. @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.es-us.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.es-us.md index 0e9245d3044..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.es-us.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.es-us.md @@ -1,78 +1,175 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example -We will use the following example: +We will use the following example: In case an app is based on the `AI1-1-CPU` flavor with a resource size of 2 (i.e. **2 CPUs**), this means that each replica of the application will be entitled to **2 vCores** and **8GiB RAM**. @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.fr-ca.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.fr-ca.md index 71ceaae08f8..fb76bef3ec6 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.fr-ca.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.fr-ca.md @@ -1,78 +1,175 @@ --- title: "AI Deploy - Stratégies de mise à l'échelle (EN)" -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example -We will use the following example: +We will use the following example: In case an app is based on the `AI1-1-CPU` flavor with a resource size of 2 (i.e. **2 CPUs**), this means that each replica of the application will be entitled to **2 vCores** and **8GiB RAM**. @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.fr-fr.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.fr-fr.md index 71ceaae08f8..fb76bef3ec6 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.fr-fr.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.fr-fr.md @@ -1,78 +1,175 @@ --- title: "AI Deploy - Stratégies de mise à l'échelle (EN)" -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example -We will use the following example: +We will use the following example: In case an app is based on the `AI1-1-CPU` flavor with a resource size of 2 (i.e. **2 CPUs**), this means that each replica of the application will be entitled to **2 vCores** and **8GiB RAM**. @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.it-it.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.it-it.md index 0e9245d3044..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.it-it.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.it-it.md @@ -1,78 +1,175 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example -We will use the following example: +We will use the following example: In case an app is based on the `AI1-1-CPU` flavor with a resource size of 2 (i.e. **2 CPUs**), this means that each replica of the application will be entitled to **2 vCores** and **8GiB RAM**. @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.pl-pl.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.pl-pl.md index 0e9245d3044..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.pl-pl.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.pl-pl.md @@ -1,78 +1,175 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example -We will use the following example: +We will use the following example: In case an app is based on the `AI1-1-CPU` flavor with a resource size of 2 (i.e. **2 CPUs**), this means that each replica of the application will be entitled to **2 vCores** and **8GiB RAM**. @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback diff --git a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.pt-pt.md b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.pt-pt.md index 0e9245d3044..632038e7195 100644 --- a/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.pt-pt.md +++ b/pages/public_cloud/ai_machine_learning/deploy_guide_04_scaling_strategies/guide.pt-pt.md @@ -1,78 +1,175 @@ --- title: AI Deploy - Scaling strategies -excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy -updated: 2023-04-04 +excerpt: Understand the scaling strategies (static scaling vs autoscaling) of AI Deploy and learn how to use them +updated: 2025-10-08 --- > [!primary] -> > AI Deploy is covered by **[OVHcloud Public Cloud Special Conditions](https://storage.gra.cloud.ovh.net/v1/AUTH_325716a587c64897acbef9a4a4726e38/contracts/d2a208c-Conditions_particulieres_OVH_Stack-WE-9.0.pdf)**. -> ## Objective -This guide covers the use of the different scaling strategies for AI Deploy. The objective is to explain the difference between **static scaling** and **autoscaling** so that you can choose the best solution depending on the use case and type of deployment. +This guide provides a comprehensive understanding of the different scaling strategies for AI Deploy. The objective is to explain the differences between **static scaling** and **autoscaling**, guide users on how to choose between them, set them during app creation, and explain how to modify scaling strategies once apps are created. ## Requirements -- a **Public Cloud** project -- access to the [OVHcloud Control Panel](/links/manager) -- start deploying an app and get to **Step 3**: `Resources` +- An active **Public Cloud** project. +- Access to the [OVHcloud Control Panel](/links/manager). +- The **OVHcloud AI CLI** (`ovhai`) installed. For installation instructions, see [how to install ovhai](/pages/public_cloud/ai_machine_learning/cli_10_howto_install_cli). ## Scaling principles -In the [OVHcloud Control Panel](/links/manager), it is possible to select the **resources** in `Step 3` of the app deployment. +When creating an application via the [OVHcloud Control Panel*** (UI) or the `ovhai` CLI, you can choose one of two scaling strategies: -This step allows you to choose between two scaling strategies: **static scaling** and **autoscaling**. +- **[Static Scaling](#static-scaling)**: Fixed number of running replicas. +- **[Autoscaling](#autoscaling)**: Dynamic replicas based on usage metrics (CPU/RAM or custom metrics). -### Static scaling +## Static Scaling -The **static scaling** strategy allows you to choose the number of replicas on which the app will be deployed. +### What is Static Scaling? + +Static scaling allows you to configure a **fixed number of replicas** (identical instances of your application) running at all times. This is the **default strategy** if not specified. The minimum number of replicas is **1** and the maximum is **10**. > [!warning] > -> It is recommended to deploy on a **minimum of 2 replicas** to have high availability! -> +> For **High Availability**, it is strongly recommended to deploy a **minimum of 2 replicas**. -**When to choose static scaling?** +### When to choose Static Scaling? -- Static scaling can be used if you want to have fixed costs. -- This scaling strategy is also useful when your consumption or inference load are fixed. +- You have **predictable, consistent workloads**. +- You prefer **fixed, predictable costs** with no unexpected resource usage spikes. +- Your use case requires **minimal latency**, as replicas are always active. -### Autoscaling +### Setting Static Scaling (UI and CLI) -With the autoscaling strategy, you can play on several parameters. +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. To use this strategy, make sure that automatic scaling is not enabled. Then, you will be asked to choose the number of replicas on which your application will run. +>> +>> ![Set static scaling on AI Deploy via UI](images/set-static-scaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the `--replicas` parameter to set the number of replicas at deployment: +>> +>> ```bash +>> ovhai app run /: \ +>> --replicas 2 \ +>> -- +>> ``` +>> -#### Minimum and maximum number of replicas +## Autoscaling -With the autoscaling strategy, it is possible to choose both the **minimum number of replicas** (1 by default) and the **maximum number of replicas**. +### What is Autoscaling? -#### Monitored metric +Autoscaling dynamically adjusts the number of application replicas based on **real-time metrics**, such as CPU or RAM usage. This is optimized for **workloads with varying demand**. -It is also possible to choose the metric to be monitored. This will act as a trigger for **autoscaling**. There are two metrics to choose from: `CPU` or `RAM`. +### Autoscaling Key Configuration Parameters -#### Trigger threshold +Using this strategy, it is possible to choose: -The threshold for the percentage of average use can also be chosen. It is an integer between 1 and 100%. - -The threshold of the average usage percentage will trigger the scaling (up or down) of the app replicas. +| Parameter | Description | +|----------------------------|-----------------------------------------------------------------------------------------------| +| **Minimum Replicas** | Lowest number of running replicas. | +| **Maximum Replicas** | Upper bound for replica count (define based on usage expectations). | +| **Monitored Metric** | The metric to be monitored. Choose between `CPU` or `RAM` for triggering autoscaling actions. | +| **Trigger Threshold (%)** | Average usage percentage used to trigger scaling up or down. Range: 1–100%. | > [!primary] > -> **High availability** will measure the average resource usage across its replicas and add instances if this average exceeds the specified average usage percentage threshold. -> -> Conversely, it will remove instances when this average resource utilisation falls below the threshold. +> Autoscaling adjusts by calculating the **average resource usage** across all replicas. If the average exceeds the threshold, new replicas are spun up; if it falls below, replicas are removed. > -**When to choose autoscaling?** +### When to Choose Autoscaling? + +- Your app has **irregular or fluctuating** inference/load patterns. +- You want to **scale cost-effectively** with actual usage. +- You are managing a **high-throughput application** with sudden demand spikes. + +### Setting Autoscaling (UI and CLI) + +> [!tabs] +> **Using the Control Panel (UI)** +>> +>> When creating your application, you will have the opportunity to choose your **scaling strategy**. By default, the strategy is set to **static scaling**. Toggle the button to switch to **Autoscaling** Then, configure minimum/maximum replicas, metric, and threshold. +>> +>> ![Set autoscaling on AI Deploy via UI](images/set-autoscaling.png){.thumbnail} +>> +> **Using ovhai CLI** +>> +>> Use the `ovhai app run` command with the following autoscaling parameters: +>> +>> ```bash +>> ovhai app run /: \ +>> --auto-min-replicas 1 \ +>> --auto-max-replicas 5 \ +>> --auto-resource-type CPU \ +>> --auto-resource-usage-threshold 75 +>> ``` +>> + +## Advanced: Custom Metrics for Autoscaling + +**Custom metrics are recommended for workloads such as GPU based inference where CPU and RAM usage provide an incomplete picture of the system’s performance or request load.** + +For advanced scenarios, you can define **custom metrics** to drive autoscaling decisions. This requires an API endpoint to fetch metrics from. + +### Required Parameter + +- `--auto-custom-api-url`: URL of the API operation to call to get the metric value. A specific `` placeholder can be given whenever metrics API is served by the deployed app itself. + +### Optional Parameters + +| Parameter | Description | +|--------------------------------|-----------------------------------------------------------------------------| +| `--auto-custom-value-location` | Specifies where the metric value is located in the API response payload. This value is format-specific. See the valueLocation from the parameters list in the [Trigger Specification documentation](https://keda.sh/docs/2.16/scalers/metrics-api/#trigger-specification) for details. | +| `--auto-custom-target-value` | Target value for metric to scale on. | +| `--auto-custom-metric-format` | Format of the metric to scale on (`JSON`, `XML`, `YAML`, `PROMETHEUS`). Default is `JSON`. | -- You can use autoscaling if you have irregular or sawtooth inference loads. +**Example**: + +Scaling based on a custom metric from an internal endpoint: + +```bash +ovhai app run /: \ + --auto-custom-api-url http://:6000/metrics \ + --auto-custom-value-location foo.bar \ + --auto-custom-target-value 42 \ + --auto-custom-metric-format JSON +``` + +## Modifying Scaling Strategies Post-Deployment + +You can also modify the scaling strategy after the app has been created using the `ovhai app scale` CLI command. This feature is not available on the UI. + +### Updating Static Scaling + +To change the number of replicas for a static scaling strategy, use the `ovhai app scale` command with the `--replicas` parameter: + +```bash +ovhai app scale --replicas +``` + +### Updating Autoscaling + +To change the autoscaling parameters, use the `ovhai app scale` command with the appropriate autoscaling parameters: + +```bash +ovhai app scale \ + --auto-min-replicas \ + --auto-max-replicas \ + --auto-resource-type \ + --auto-resource-usage-threshold \ + +``` ## Scaling example -We will use the following example: +We will use the following example: In case an app is based on the `AI1-1-CPU` flavor with a resource size of 2 (i.e. **2 CPUs**), this means that each replica of the application will be entitled to **2 vCores** and **8GiB RAM**. @@ -94,13 +191,11 @@ In this example, the app will be scaled up when the average RAM usage across all > [!primary] > -> The **total deployment price** will be calculated using the minimum number of replicas. -> +> The total deployment price for **autoscaling apps** is calculated based on the **minimum number of replicas**, **but** costs can **increase** during scaling. -> [!warning] -> -> The cost may increase as `Autoscaling` increases. -> +## Conclusion + +Choosing the right scaling strategy is critical for balancing cost, performance, and reliability in your AI Deploy applications. Static scaling offers stability and predictability, while autoscaling provides flexibility for dynamic workloads. ## Feedback