چند سال اخیر شاهد پیشرفت سریع در زمینه یادگیری عمیق بوده ایم. اگرچه سختافزار بهبود یافته است، مانند آخرین نسل شتابدهندههای NVIDIA و آمازون، متخصصان یادگیری ماشین پیشرفته (ML) هنوز به طور مرتب با مشکلاتی در استفاده از مدلهای یادگیری عمیق بزرگ خود برای برنامههایی مانند پردازش زبان طبیعی (NLP) مواجه میشوند.
در پست قبلی بحث کردیم قابلیت ها و تنظیمات قابل تنظیم in استقرار مدل آمازون SageMaker که می تواند استنتاج با این مدل های بزرگ را آسان تر کند. امروز، ما یک جدید را اعلام می کنیم آمازون SageMaker ظرف یادگیری عمیق (DLC) که می توانید از آن برای شروع استنتاج مدل های بزرگ در عرض چند دقیقه استفاده کنید. این DLC برخی از محبوب ترین کتابخانه های منبع باز را برای استنتاج موازی مدل، مانند DeepSpeed و Hugging Face Accelerate، بسته بندی می کند.
در این پست، ما از یک DLC استنتاج مدل بزرگ SageMaker برای استقرار دو مدل از محبوبترین مدلهای NLP بزرگ استفاده میکنیم: BigScience. BLOOM-176B و متا OPT-30B از مخزن Hugging Face. به طور خاص، ما از سرویس دهی و تکنیکهای موازی تانسور DeepSpeed برای دستیابی به تأخیر 0.1 ثانیه در هر توکن در یک مورد استفاده از تولید متن استفاده میکنیم.
شما می توانید نمونه کامل نوت بوک های ما را در ما بیابید مخزن GitHub.
تکنیک های استنتاج مدل های بزرگ
مدلهای زبان اخیراً از نظر اندازه و محبوبیت افزایش یافتهاند. با دسترسی آسان از باغ وحش های مدل مانند Hugging Face و بهبود دقت و عملکرد در وظایف NLP مانند طبقه بندی و تولید متن، پزشکان به طور فزاینده ای به این مدل های بزرگ دست می یابند. با این حال، مدلهای بزرگ اغلب آنقدر بزرگ هستند که در حافظه یک شتابدهنده جای بگیرند. به عنوان مثال، مدل BLOOM-176B می تواند به بیش از 350 گیگابایت حافظه شتاب دهنده نیاز داشته باشد که بسیار بیشتر از ظرفیت شتاب دهنده های سخت افزاری موجود امروزی است. این امر نیاز به استفاده از تکنیکهای موازی مدل از کتابخانههایی مانند DeepSpeed و Hugging Face Accelerate برای توزیع یک مدل در چندین شتابدهنده برای استنتاج دارد. در این پست از ظرف استنتاج مدل بزرگ SageMaker برای تولید و مقایسه عملکرد تاخیر و توان عملیاتی با استفاده از این دو کتابخانه منبع باز.
DeepSpeed و Accelerate از تکنیک های مختلفی برای بهینه سازی مدل های زبان بزرگ برای استنتاج استفاده می کنند. تفاوت اصلی در DeepSpeed است استفاده از هسته های بهینه شده. این هسته ها می توانند با کاهش تنگناها در نمودار محاسباتی مدل، تأخیر استنتاج را به طور چشمگیری بهبود بخشند. توسعه هسته های بهینه شده ممکن است دشوار باشد و معمولاً مختص یک معماری مدل خاص هستند. DeepSpeed از مدل های بزرگ محبوب مانند OPT و BLOOM با این هسته های بهینه شده پشتیبانی می کند. در مقابل، کتابخانه Accelerate Hugging Face شامل هسته های بهینه سازی شده در زمان نوشتن نیست. همانطور که در بخش نتایج خود بحث می کنیم، این تفاوت مسئول بیشتر مزیت عملکردی است که DeepSpeed نسبت به Accelerate دارد.
تفاوت دوم بین DeepSpeed و Accelerate نوع موازی مدل است. Accelerate از موازی خط لوله برای تقسیم یک مدل بین لایه های پنهان یک مدل استفاده می کند، در حالی که DeepSpeed از موازی سازی تانسور برای تقسیم خود لایه ها استفاده می کند. موازی خط لوله یک رویکرد انعطاف پذیر است که از انواع مدل های بیشتری پشتیبانی می کند و می تواند در صورت استفاده از اندازه های بزرگتر، توان عملیاتی را بهبود بخشد. موازی سازی تانسور به ارتباطات بیشتری بین GPU ها نیاز دارد، زیرا لایه های مدل می توانند در چندین دستگاه پخش شوند، اما می توانند با درگیر کردن چندین GPU به طور همزمان، تأخیر استنتاج را بهبود بخشند. می توانید در مورد تکنیک های موازی سازی بیشتر بدانید مقدمه ای بر موازی سازی مدل و موازی سازی مدل.
بررسی اجمالی راه حل
برای میزبانی موثر مدلهای زبان بزرگ، به ویژگیها و پشتیبانی در زمینههای کلیدی زیر نیاز داریم:
- راه حل های ساخت و آزمایش - با توجه به ماهیت تکراری توسعه ML، ما به توانایی ساختن، تکرار سریع و آزمایش نحوه رفتار نقطه پایانی استنتاج زمانی که این مدلها میزبانی میشوند، نیاز داریم، از جمله توانایی شکست سریع. این مدلها معمولاً فقط در نمونههای بزرگتری مانند p4dn یا g5 میزبانی میشوند، و با توجه به اندازه مدلها، چرخش یک نمونه استنتاج و اجرای هر تکرار آزمایشی ممکن است کمی طول بکشد. آزمایش محلی معمولاً دارای محدودیت هایی است زیرا برای آزمایش به یک نمونه مشابه از نظر اندازه نیاز دارید و به دست آوردن این مدل ها آسان نیست.
- استقرار و اجرا در مقیاس - فایلهای مدل باید در نمونههای استنتاج بارگذاری شوند، که با توجه به اندازه، خود چالشی است. Tar / Un-Tar به عنوان مثال برای Bloom-176B حدود 1 ساعت طول می کشد تا ایجاد شود و یک ساعت دیگر بارگذاری شود. ما به یک مکانیسم جایگزین نیاز داریم تا امکان دسترسی آسان به فایل های مدل را فراهم کند.
- در حال بارگیری مدل به صورت تکی - برای یک فرآیند چندکاره، باید اطمینان حاصل کنیم که مدل فقط یک بار بارگذاری می شود تا در شرایط مسابقه قرار نگیریم و منابع غیر ضروری را بیشتر خرج نکنیم. در این پست راهی برای بارگذاری مستقیم از آن نشان می دهیم سرویس ذخیره سازی ساده آمازون (Amazon S3). با این حال، این تنها در صورتی کار می کند که از تنظیمات پیش فرض DJL استفاده کنیم. بهعلاوه، هرگونه مقیاسبندی نقاط پایانی باید بتواند در چند دقیقه به بالا بچرخد، که نیاز به بازنگری در نحوه بارگیری و توزیع مدلها دارد.
- چارچوب های شاردینگ – این مدلها معمولاً باید با مکانیزم موازی تانسور یا با تقسیم خط لوله به عنوان تکنیکهای معمولی تقسیمبندی باشند، و ما مفاهیم پیشرفتهای مانند تقسیمبندی ZeRO بر روی تقسیمبندی تانسور داریم. برای کسب اطلاعات بیشتر در مورد تکنیک های اشتراک گذاری، مراجعه کنید موازی سازی مدل. برای رسیدن به این هدف، میتوانیم ترکیبهای مختلفی داشته باشیم و از فریمورکهای NIVIDIA، DeepSpeed و دیگران استفاده کنیم. این نیاز به توانایی آزمایش BYOC یا استفاده از ظروف 1P و تکرار روی راه حل ها و اجرای آزمایش های محک دارد. همچنین ممکن است بخواهید گزینه های میزبانی مختلف مانند ناهمزمان، بدون سرور و موارد دیگر را آزمایش کنید.
- انتخاب سخت افزار - انتخاب شما در سخت افزار با توجه به تمام نکات ذکر شده و الگوهای ترافیک بیشتر، نیازهای مورد استفاده و اندازه مدل تعیین می شود.
در این پست، از هسته های بهینه شده DeepSpeed و تکنیک های موازی تانسور برای میزبانی BLOOM-176B و OPT-30B در SageMaker استفاده می کنیم. ما همچنین نتایج را از Accelerate مقایسه می کنیم تا مزایای عملکرد هسته های بهینه و موازی تانسور را نشان دهیم. برای اطلاعات بیشتر در مورد DeepSpeed و Accelerate، مراجعه کنید استنتاج DeepSpeed: امکان استنتاج کارآمد مدلهای ترانسفورماتور در مقیاس بیسابقه و استنتاج فوق العاده سریع BLOOM با سرعت عمیق و شتاب.
ما از DJLServing به عنوان راه حل ارائه مدل در این مثال استفاده می کنیم. DJLServing یک راه حل ارائه مدل جهانی با کارایی بالا است که توسط Deep Java Library (DJL) طراحی شده است که زبان برنامه نویسی آگنوستیک است. برای آشنایی بیشتر با DJL و DJLServing به ادامه مطلب مراجعه کنید استقرار مدل های بزرگ در Amazon SageMaker با استفاده از استنتاج موازی مدل DJLServing و DeepSpeed.
شایان ذکر است که هستههای بهینهشده میتوانند منجر به تغییرات دقیق و یک نمودار محاسباتی اصلاحشده شوند که از نظر تئوری میتواند منجر به تغییر رفتار مدل شود. اگرچه این امر میتواند گاهاً نتیجه استنتاج را تغییر دهد، اما انتظار نداریم که این تفاوتها تأثیری اساسی بر معیارهای ارزیابی اساسی یک مدل بگذارد. با این وجود، به پزشکان توصیه میشود هنگام استفاده از این هستهها، خروجیهای مدل را همانطور که انتظار میرود تأیید کنند.
مراحل زیر نحوه استقرار یک مدل BLOOM-176B در SageMaker با استفاده از DJLServing و یک ظرف استنتاج مدل بزرگ SageMaker را نشان می دهد. نمونه کامل آن نیز در ما موجود است مخزن GitHub.
با استفاده از DJLServing SageMaker DLC image
از کد زیر برای استفاده از تصویر DJLServing SageMaker DLC پس از جایگزینی منطقه با منطقه خاصی که نوت بوک را در آن اجرا می کنید استفاده کنید:
فایل مدل ما را ایجاد کنید
ابتدا یک فایل به نام ایجاد می کنیم serving.properties
که فقط یک خط کد را شامل می شود. این به سرور مدل DJL می گوید که از موتور DeepSpeed استفاده کند. فایل حاوی کد زیر است:
serving.properties
یک فایل تعریف شده توسط DJLServing است که برای پیکربندی پیکربندی هر مدل استفاده می شود.
بعد، ما خود را ایجاد می کنیم model.py
فایل، که کد مورد نیاز برای بارگیری و سپس ارائه مدل را تعریف می کند. در کد ما در قسمت می خوانیم TENSOR_PARALLEL_DEGREE
متغیر محیطی (مقدار پیش فرض 1 است). این تعداد دستگاه هایی را تعیین می کند که ماژول های موازی تانسور روی آنها توزیع شده اند. توجه داشته باشید که DeepSpeed چند تعریف داخلی برای پارتیشن ارائه می دهد، از جمله یکی برای مدل های BLOOM. با مشخص کردن از آن استفاده می کنیم replace_method
و relpace_with_kernel_inject
. اگر یک مدل سفارشی دارید و به DeepSpeed برای پارتیشن بندی موثر نیاز دارید، باید تغییر دهید relpace_with_kernel_inject
به false
و اضافه کنید injection_policy
تا پارتیشن زمان اجرا کار کند. برای اطلاعات بیشتر مراجعه کنید مقداردهی اولیه برای استنتاج. برای مثال ما از مدل BLOOM از پیش پارتیشن بندی شده در DeepSpeed استفاده کردیم.
در مرحله دوم، در model.py
فایل، ما همچنین پس از چرخش نقطه پایانی، مدل را از آمازون S3 بارگذاری می کنیم. مدل در بارگذاری می شود /tmp
فضای روی کانتینر زیرا SageMaker آن را نقشه میکشد /tmp
به فروشگاه بلوک الاستیک آمازون حجم (Amazon EBS) که وقتی پارامتر ایجاد نقطه پایانی را مشخص می کنیم، نصب می شود VolumeSizeInGB
. برای نمونه هایی مانند p4dn که با نمونه حجم از پیش ساخته شده است، می توانیم به استفاده از /tmp
روی ظرف کد زیر را ببینید:
DJLServing نصب زمان اجرا را روی هر بسته پیپ تعریف شده در آن مدیریت می کند requirement.txt
. این فایل دارای:
ما یک دایرکتوری به نام ایجاد کرده ایم code
و model.py
, serving.properties
و requirements.txt
فایل ها قبلا در این دایرکتوری ایجاد شده اند. برای مشاهده فایل ها می توانید کد زیر را از ترمینال اجرا کنید:
شکل زیر ساختار آن را نشان می دهد model.tar.gz
.
در نهایت، فایل مدل را ایجاد می کنیم و آن را در آمازون S3 آپلود می کنیم:
مدل را از Hugging Face دانلود و ذخیره کنید (اختیاری)
در این قسمت مراحل را برای شما فراهم کرده ایم که بخواهید مدل را در Amazon S3 دانلود کرده و از آنجا استفاده کنید. مراحل در فایل Jupyter در GitHub ارائه شده است. تصویر زیر تصویری از مراحل را نشان می دهد.
یک مدل SageMaker ایجاد کنید
اکنون یک را ایجاد می کنیم مدل SageMaker. ما استفاده می کنیم رجیستری ظروف الاستیک آمازون تصویر (Amazon ECR) ارائه شده توسط و مصنوع مدل از مرحله قبل برای ایجاد مدل SageMaker. در تنظیمات مدل، ما پیکربندی می کنیم TENSOR_PARALLEL_DEGREE=8
، به این معنی که مدل در امتداد 8 پردازنده گرافیکی پارتیشن بندی شده است. کد زیر را ببینید:
پس از اجرای سلول قبلی در فایل Jupyter، خروجی مشابه زیر را مشاهده می کنید:
یک نقطه پایانی SageMaker ایجاد کنید
می توانید از هر نمونه ای با چندین پردازنده گرافیکی برای آزمایش استفاده کنید. در این دمو از یک نمونه p4d.24xlarge استفاده می کنیم. در کد زیر به نحوه تنظیم کردن آن توجه کنید ModelDataDownloadTimeoutInSeconds
, ContainerStartupHealthCheckTimeoutInSeconds
و VolumeSizeInGB
پارامترهایی برای تطبیق با اندازه مدل بزرگ را VolumeSizeInGB
پارامتر برای نمونههای GPU که از پیوست ولوم EBS پشتیبانی میکنند، کاربرد دارد.
در نهایت، یک نقطه پایانی SageMaker ایجاد می کنیم:
می بینید که در کد زیر چاپ شده است:
شروع نقطه پایانی ممکن است کمی طول بکشد. در صورت برخورد با آن می توانید چند بار دیگر امتحان کنید InsufficientInstanceCapacity
یا می توانید درخواستی را به AWS برای افزایش محدودیت در حساب خود مطرح کنید.
تنظیم عملکرد
اگر قصد دارید از این پست و نوت بوک همراه با مدل دیگری استفاده کنید، ممکن است بخواهید برخی از پارامترهای قابل تنظیمی که SageMaker، DeepSpeed و DJL ارائه میدهند را بررسی کنید. آزمایش مکرر با این پارامترها می تواند تأثیری اساسی بر تأخیر، توان عملیاتی و هزینه مدل بزرگ میزبان شما داشته باشد. برای کسب اطلاعات بیشتر در مورد پارامترهای تنظیم مانند تعداد کارگران، درجه موازی تانسور، اندازه صف کار و موارد دیگر، به تنظیمات سرویس DJL و استقرار مدل های بزرگ در Amazon SageMaker با استفاده از استنتاج موازی مدل DJLServing و DeepSpeed.
نتایج
در این پست، ما از DeepSpeed برای میزبانی BLOOM-176B و OPT-30B در نمونه های SageMaker ML استفاده کردیم. جدول زیر نتایج عملکرد ما را خلاصه می کند، از جمله مقایسه با Hugging Face’s Accelerate. تأخیر تعداد میلیثانیههای لازم برای تولید یک رشته 256 توکنی را چهار بار منعکس میکند.batch_size=4
) از مدل. توان عملیاتی تعداد توکن های تولید شده در هر ثانیه را برای هر تست منعکس می کند. برای Hugging Face Accelerate، از بارگذاری پیشفرض کتابخانه با نقشهبرداری حافظه GPU استفاده کردیم. برای DeepSpeed، ما از مکانیسم بارگیری سریعتر ایست بازرسی آن استفاده کردیم.
مدل | کتابخانه | دقت مدل | اندازه دسته | مدرک موازی | نمونه، مثال | زمان بارگذاری (بازدید کنندگان) |
تأخیر (خروجی توکن 4×256) | . | ||
. | . | . | . | . | . | . | P50 (اماس) |
P90 (اماس) |
P99 (اماس) |
ظرفیت تولید (توکن ها/ثانیه) |
BLOOM-176B | در اعماق | INT8 | 4 | 8 | p4d.24xlarge | 74.9 | 27,564 | 27,580 | 32,179 | 37.1 |
BLOOM-176B | شتاب دادن | INT8 | 4 | 8 | p4d.24xlarge | 669.4 | 92,694 | 92,735 | 103,292 | 11.0 |
OPT-30B | در اعماق | FP16 | 4 | 4 | g5.24xlarge | 239.4 | 11,299 | 11,302 | 11,576 | 90.6 |
OPT-30B | شتاب دادن | FP16 | 4 | 4 | g5.24xlarge | 533.8 | 63,734 | 63,737 | 67,605 | 16.1 |
از منظر تاخیر، DeepSpeed برای BLOOM-3.4B حدود 176 برابر و برای OPT-5.6B 30 برابر سریعتر از Accelerate است. هسته های بهینه شده DeepSpeed مسئول بیشتر این تفاوت در تاخیر هستند. با توجه به این نتایج، اگر مدل انتخابی شما پشتیبانی میشود، توصیه میکنیم از DeepSpeed روی Accelerate استفاده کنید.
همچنین شایان ذکر است که زمان بارگذاری مدل با DeepSpeed بسیار کوتاهتر بود، و اگر پیشبینی میکنید که نیاز به افزایش سریع تعداد نقاط پایانی خود دارید، آن را به گزینه بهتری تبدیل میکند. اگر مدلها یا دقتهای مدلی دارید که توسط DeepSpeed پشتیبانی نمیشوند، تکنیک موازی خط لوله انعطافپذیرتر Accelerate ممکن است گزینه بهتری باشد.
این نتایج همچنین تفاوت در تأخیر و توان عملیاتی اندازه های مختلف مدل را نشان می دهد. در آزمایشهای ما، OPT-30B 2.4 برابر تعداد توکنها در واحد زمان نسبت به BLOOM-176B در نوع نمونهای که بیش از سه برابر ارزانتر است تولید میکند. بر اساس قیمت هر واحد توان عملیاتی، OPT-30B در نمونه g5.24xl 8.9 برابر بهتر از BLOOM-176B در نمونه p4d.24xl است. اگر محدودیتهای تأخیر، توان عملیاتی یا هزینه سختی دارید، از کوچکترین مدل ممکن استفاده کنید که همچنان نیازهای عملکردی را برآورده میکند.
پاک کردن
به عنوان بخشی از بهترین روشها، همیشه توصیه میشود که نمونههای بیحرکت را حذف کنید. کد زیر به شما نشان می دهد که چگونه نمونه ها را حذف کنید.
به صورت اختیاری، نقطه بررسی مدل را از S3 خود حذف کنید
نتیجه
در این پست، نحوه استفاده از ظروف استنتاج مدل بزرگ SageMaker برای میزبانی دو مدل زبان بزرگ BLOOM-176B و OPT-30B را نشان دادیم. ما از تکنیکهای موازی مدل DeepSpeed با چندین GPU در یک نمونه SageMaker ML استفاده کردیم.
برای جزئیات بیشتر در مورد Amazon SageMaker و قابلیتهای استنتاج مدل بزرگ آن، مراجعه کنید Amazon SageMaker اکنون از استقرار مدلهای بزرگ از طریق اندازه حجم قابل تنظیم و سهمیههای وقفه زمانی پشتیبانی میکند و استنتاج بلادرنگ.
درباره نویسندگان
سیمون زامارین یک معمار راه حل های AI/ML است که تمرکز اصلی آن کمک به مشتریان برای استخراج ارزش از دارایی های داده خود است. سایمون در اوقات فراغت خود از گذراندن وقت با خانواده، خواندن علمی تخیلی و کار بر روی پروژه های مختلف خانه DIY لذت می برد.
روپیند گروال یک معمار راه حل های تخصصی Sr Ai/ML با AWS است. او در حال حاضر روی ارائه مدل ها و MLO ها در SageMaker تمرکز دارد. قبل از این نقش، او به عنوان مهندس یادگیری ماشین، مدلهای ساخت و میزبانی کار کرده است. خارج از محل کار او از بازی تنیس و دوچرخه سواری در مسیرهای کوهستانی لذت می برد.
فرانک لیو یک مهندس نرم افزار برای AWS Deep Learning است. او بر ساخت ابزارهای یادگیری عمیق خلاقانه برای مهندسین نرم افزار و دانشمندان تمرکز دارد. در اوقات فراغت خود از پیاده روی با دوستان و خانواده لذت می برد.
آلن تان یک مدیر ارشد محصول با تلاش های SageMaker در استنتاج مدل های بزرگ است. او علاقه زیادی به استفاده از یادگیری ماشینی در حوزه تجزیه و تحلیل دارد. خارج از محل کار، او از فضای باز لذت می برد.
داوال پاتل یک معمار اصلی یادگیری ماشین در AWS است. او با سازمانهایی از شرکتهای بزرگ گرفته تا استارتآپهای متوسط در زمینه مشکلات مربوط به محاسبات توزیعشده و هوش مصنوعی کار کرده است. او بر روی یادگیری عمیق از جمله دامنه های NLP و Computer Vision تمرکز دارد. او به مشتریان کمک می کند تا به استنباط مدل با عملکرد بالا در SageMaker دست یابند.
چینگ لان مهندس توسعه نرم افزار در AWS است. او روی چندین محصول چالش برانگیز در آمازون کار کرده است، از جمله راه حل های استنتاج ML با کارایی بالا و سیستم ثبت گزارش با کارایی بالا. تیم Qing با موفقیت اولین مدل میلیارد پارامتر را در تبلیغات آمازون با تاخیر بسیار کم مورد نیاز راه اندازی کرد. Qing دانش عمیقی در مورد بهینه سازی زیرساخت و شتاب یادگیری عمیق دارد.
کینگوی لی یک متخصص یادگیری ماشین در خدمات وب آمازون است. او دکترای خود را دریافت کرد. در تحقیقات عملیات پس از اینکه حساب کمک هزینه تحقیقاتی مشاورش را شکست و نتوانست جایزه نوبل را که وعده داده بود تحویل دهد. در حال حاضر او به مشتریان در صنعت خدمات مالی و بیمه کمک می کند تا راه حل های یادگیری ماشینی را در AWS بسازند. در اوقات فراغت به مطالعه و تدریس علاقه دارد.
رابرت ون دوسن مدیر محصول ارشد آمازون SageMaker است. او بهینه سازی مدل یادگیری عمیق را برای برنامه هایی مانند استنتاج مدل های بزرگ هدایت می کند.
سیذارت ونکاتسان یک مهندس نرم افزار در AWS Deep Learning است. او در حال حاضر بر ساخت راه حل هایی برای استنتاج مدل های بزرگ تمرکز دارد. قبل از AWS او در سازمان خواربارفروشی آمازون کار می کرد و ویژگی های پرداخت جدید را برای مشتریان در سراسر جهان ایجاد می کرد. خارج از محل کار، او از اسکی، فضای باز و تماشای ورزش لذت می برد.
- پیشرفته (300)
- AI
- آی هنر
- مولد هنر ai
- ربات ai
- آمازون SageMaker
- هوش مصنوعی
- گواهی هوش مصنوعی
- هوش مصنوعی در بانکداری
- ربات هوش مصنوعی
- ربات های هوش مصنوعی
- نرم افزار هوش مصنوعی
- آموزش ماشین AWS
- بلاکچین
- کنفرانس بلاک چین ai
- coingenius
- هوش مصنوعی محاوره ای
- کنفرانس کریپتو ai
- دل-ه
- یادگیری عمیق
- گوگل ai
- فراگیری ماشین
- افلاطون
- افلاطون آی
- هوش داده افلاطون
- بازی افلاطون
- PlatoData
- بازی پلاتو
- مقیاس Ai
- نحو
- زفیرنت