يمكن أن يكون إنشاء خطوط أنابيب قوية وقابلة لإعادة الاستخدام للتعلم الآلي (ML) عملية معقدة وتستغرق وقتًا طويلاً. عادةً ما يختبر المطورون نصوص المعالجة والتدريب الخاصة بهم محليًا ، ولكن عادةً ما يتم اختبار خطوط الأنابيب نفسها في السحابة. يؤدي إنشاء وتشغيل خط أنابيب كامل أثناء التجريب إلى إضافة نفقات عامة وتكلفة غير مرغوب فيها إلى دورة حياة التطوير. في هذا المنشور ، نوضح بالتفصيل كيف يمكنك استخدام الوضع المحلي لخطوط أنابيب Amazon SageMaker لتشغيل خطوط أنابيب ML محليًا لتقليل تطوير خطوط الأنابيب ووقت التشغيل مع تقليل التكلفة. بعد اختبار خط الأنابيب بالكامل محليًا ، يمكنك إعادة تشغيله بسهولة الأمازون SageMaker الموارد المُدارة مع بضعة أسطر فقط من تغييرات التعليمات البرمجية.
نظرة عامة على دورة حياة ML
أحد الدوافع الرئيسية للابتكارات والتطبيقات الجديدة في ML هو توافر البيانات وكميتها بالإضافة إلى خيارات الحوسبة الأرخص. في العديد من المجالات ، أثبت ML أنه قادر على حل المشكلات التي لم يكن من الممكن حلها سابقًا باستخدام البيانات الكبيرة والتقنيات التحليلية الكلاسيكية ، ويتزايد الطلب على علوم البيانات وممارسي ML بشكل مطرد. من مستوى عالٍ جدًا ، تتكون دورة حياة ML من العديد من الأجزاء المختلفة ، ولكن بناء نموذج ML يتكون عادةً من الخطوات العامة التالية:
- تنقية البيانات وإعدادها (هندسة الميزات)
- تدريب النموذج والضبط
- تقييم النموذج
- نشر النموذج (أو تحويل دفعة)
في خطوة إعداد البيانات ، يتم تحميل البيانات وتدليكها وتحويلها إلى نوع المدخلات أو الميزات التي يتوقعها نموذج ML. عادةً ما تكون كتابة البرامج النصية لتحويل البيانات عملية تكرارية ، حيث تكون حلقات التغذية الراجعة السريعة مهمة لتسريع عملية التطوير. ليس من الضروري عادةً استخدام مجموعة البيانات الكاملة عند اختبار البرامج النصية للميزات الهندسية ، ولهذا السبب يمكنك استخدام ميزة الوضع المحلي من معالجة SageMaker. يتيح لك ذلك إمكانية التشغيل محليًا وتحديث الكود بشكل متكرر باستخدام مجموعة بيانات أصغر. عندما يكون الكود النهائي جاهزًا ، يتم إرساله إلى مهمة المعالجة عن بُعد ، والتي تستخدم مجموعة البيانات الكاملة وتعمل على المثيلات المُدارة من SageMaker.
تشبه عملية التطوير خطوة إعداد البيانات لكل من تدريب النموذج وخطوات تقييم النموذج. يستخدم علماء البيانات ميزة الوضع المحلي من SageMaker Training للتكرار سريعًا مع مجموعات البيانات الأصغر محليًا ، قبل استخدام جميع البيانات الموجودة في مجموعة مُدارة من SageMaker من مثيلات ML المحسّنة. يؤدي ذلك إلى تسريع عملية التطوير وإلغاء تكلفة تشغيل مثيلات ML التي يديرها SageMaker أثناء التجريب.
مع زيادة نضج تعلم الآلة للمؤسسة ، يمكنك استخدام خطوط أنابيب Amazon SageMaker لإنشاء خطوط أنابيب ML التي تجمع هذه الخطوات معًا ، مما يخلق تدفقات عمل ML أكثر تعقيدًا تعالج نماذج ML وتدريبها وتقييمها. SageMaker Pipelines هي خدمة مُدارة بالكامل لأتمتة الخطوات المختلفة لسير عمل ML ، بما في ذلك تحميل البيانات وتحويل البيانات وتدريب النموذج وضبطه ونشر النموذج. حتى وقت قريب ، كان بإمكانك تطوير البرامج النصية واختبارها محليًا ولكن كان عليك اختبار خطوط أنابيب ML الخاصة بك في السحابة. هذا جعل التكرار على تدفق وشكل خطوط أنابيب ML عملية بطيئة ومكلفة. الآن ، مع ميزة الوضع المحلي المضافة لخطوط أنابيب SageMaker ، يمكنك تكرار واختبار خطوط أنابيب ML الخاصة بك بشكل مشابه لكيفية الاختبار والتكرار على البرامج النصية للمعالجة والتدريب. يمكنك تشغيل واختبار خطوط الأنابيب الخاصة بك على جهازك المحلي ، باستخدام مجموعة فرعية صغيرة من البيانات للتحقق من صحة بناء جملة خطوط الأنابيب ووظائفها.
خطوط الأنابيب SageMaker
توفر SageMaker Pipelines طريقة مؤتمتة بالكامل لتشغيل تدفقات عمل ML البسيطة أو المعقدة. باستخدام SageMaker Pipelines ، يمكنك إنشاء تدفقات عمل ML باستخدام Python SDK سهل الاستخدام ، ثم تصور وإدارة سير عملك باستخدام أمازون ساجميكر ستوديو. يمكن أن تكون فرق علوم البيانات الخاصة بك أكثر كفاءة وتتوسع بشكل أسرع من خلال تخزين خطوات سير العمل التي تقوم بإنشائها في SageMaker Pipelines وإعادة استخدامها. يمكنك أيضًا استخدام القوالب المعدة مسبقًا التي تعمل على أتمتة إنشاء البنية التحتية والمستودعات لإنشاء النماذج واختبارها وتسجيلها ونشرها داخل بيئة ML الخاصة بك. تتوفر هذه القوالب تلقائيًا لمؤسستك ، ويتم توفيرها باستخدام كتالوج خدمة AWS من المنتجات
تقدم SageMaker Pipelines تكاملًا مستمرًا وممارسات نشر مستمر (CI / CD) إلى ML ، مثل الحفاظ على التكافؤ بين بيئات التطوير والإنتاج ، والتحكم في الإصدار ، والاختبار عند الطلب ، والأتمتة الشاملة ، مما يساعدك على توسيع نطاق التعلم الآلي في جميع أنحاء منظمة. يعرف ممارسو DevOps أن بعض الفوائد الرئيسية لاستخدام تقنيات CI / CD تشمل زيادة الإنتاجية عبر المكونات القابلة لإعادة الاستخدام وزيادة الجودة من خلال الاختبار الآلي ، مما يؤدي إلى عائد استثمار أسرع لأهداف عملك. هذه الفوائد متاحة الآن لممارسي MLOps باستخدام خطوط أنابيب SageMaker لأتمتة تدريب واختبار ونشر نماذج ML. باستخدام الوضع المحلي ، يمكنك الآن التكرار بسرعة أكبر أثناء تطوير البرامج النصية لاستخدامها في خط الأنابيب. لاحظ أنه لا يمكن عرض مثيلات خط الأنابيب المحلية أو تشغيلها داخل Studio IDE ؛ ومع ذلك ، ستتوفر خيارات عرض إضافية لخطوط الأنابيب المحلية قريبًا.
يوفر SageMaker SDK غرضًا عامًا تكوين الوضع المحلي يسمح للمطورين بتشغيل واختبار المعالجات والمقدرات المدعومة في بيئتهم المحلية. يمكنك استخدام التدريب على الوضع المحلي مع العديد من صور إطار العمل المدعومة من AWS (TensorFlow و MXNet و Chainer و PyTorch و Scikit-Learn) بالإضافة إلى الصور التي توفرها بنفسك.
تدعم خطوط أنابيب SageMaker ، التي تنشئ رسمًا بيانيًا دوريًا موجهًا (DAG) لخطوات سير العمل المنظمة ، العديد من الأنشطة التي تعد جزءًا من دورة حياة ML. في الوضع المحلي ، يتم دعم الخطوات التالية:
- معالجة خطوات العمل - تجربة مُبسطة ومُدارة على SageMaker لتشغيل أحمال عمل معالجة البيانات ، مثل هندسة الميزات والتحقق من صحة البيانات وتقييم النموذج وتفسير النموذج
- خطوات عمل التدريب - عملية تكرارية تعلم نموذجًا لعمل تنبؤات من خلال تقديم أمثلة من مجموعة بيانات تدريبية
- وظائف ضبط Hyperparameter - طريقة آلية لتقييم واختيار المعلمات الفائقة التي تنتج النموذج الأكثر دقة
- خطوات التشغيل الشرطي - خطوة توفر تشغيلًا مشروطًا للفروع في خط الأنابيب
- خطوة النموذج - باستخدام وسيطات CreateModel ، يمكن لهذه الخطوة إنشاء نموذج للاستخدام في خطوات التحويل أو النشر اللاحق كنقطة نهاية
- تحويل خطوات العمل - وظيفة تحويل مجمعة تنشئ تنبؤات من مجموعات بيانات كبيرة ، وتقوم بتشغيل الاستدلال عندما لا تكون هناك حاجة إلى نقطة نهاية ثابتة
- خطوات الفشل - خطوة توقف تشغيل خط الأنابيب وتضع علامة على التشغيل على أنه فشل
حل نظرة عامة
يوضح الحل الذي نقدمه الخطوات الأساسية لإنشاء خطوط أنابيب SageMaker وتشغيلها في الوضع المحلي ، مما يعني استخدام وحدة المعالجة المركزية المحلية وذاكرة الوصول العشوائي وموارد القرص لتحميل خطوات سير العمل وتشغيلها. يمكن تشغيل بيئتك المحلية على كمبيوتر محمول ، باستخدام IDEs الشائعة مثل VSCode أو PyCharm ، أو يمكن استضافتها بواسطة SageMaker باستخدام مثيلات دفتر الملاحظات الكلاسيكية.
يسمح الوضع المحلي لعلماء البيانات بتجميع الخطوات معًا ، والتي يمكن أن تتضمن وظائف المعالجة والتدريب والتقييم ، وتشغيل سير العمل بالكامل محليًا. عند الانتهاء من الاختبار محليًا ، يمكنك إعادة تشغيل خط الأنابيب في بيئة مُدارة من SageMaker عن طريق استبدال ملف LocalPipelineSession
مع الكائن PipelineSession
، مما يضفي الاتساق على دورة حياة ML.
بالنسبة لعينة الكمبيوتر الدفتري هذه ، نستخدم مجموعة بيانات قياسية متاحة للجمهور ، وهي UCI آلة التعلم Abalone Dataset. الهدف هو تدريب نموذج ML لتحديد عمر حلزون أذن البحر من قياساته الفيزيائية. في جوهرها ، هذه مشكلة انحدار.
تتوفر جميع التعليمات البرمجية المطلوبة لتشغيل نموذج الكمبيوتر الدفتري هذا على GitHub بتنسيق أمثلة الأمازون ساجيماكر مخزن. في نموذج دفتر الملاحظات هذا ، يتم إنشاء كل خطوة من خطوات سير عمل خط الأنابيب بشكل مستقل ثم توصيلها معًا لإنشاء خط الأنابيب. نقوم بإنشاء الخطوات التالية:
- خطوة المعالجة (هندسة الميزات)
- خطوة التدريب (تدريب نموذجي)
- خطوة المعالجة (تقييم النموذج)
- خطوة الشرط (دقة النموذج)
- إنشاء نموذج خطوة (نموذج)
- خطوة التحويل (تحويل دفعة)
- تسجيل خطوة النموذج (الحزمة النموذجية)
- خطوة الفشل (فشل التشغيل)
يوضح الرسم البياني التالي خط الأنابيب لدينا.
المتطلبات الأساسية المسبقة
للمتابعة في هذا المنشور ، تحتاج إلى ما يلي:
بعد وضع هذه المتطلبات الأساسية في مكانها الصحيح ، يمكنك تشغيل نموذج دفتر الملاحظات كما هو موضح في الأقسام التالية.
بناء خط الأنابيب الخاص بك
في عينة دفتر الملاحظات هذا ، نستخدمها وضع البرنامج النصي SageMaker بالنسبة لمعظم عمليات ML ، مما يعني أننا نقدم كود Python الفعلي (نصوص برمجية) لأداء النشاط وتمرير مرجع إلى هذا الرمز. يوفر وضع البرنامج النصي مرونة كبيرة للتحكم في السلوك داخل معالجة SageMaker من خلال السماح لك بتخصيص التعليمات البرمجية الخاصة بك مع الاستمرار في الاستفادة من حاويات SageMaker سابقة الإنشاء مثل XGBoost أو Scikit-Learn. تتم كتابة الكود المخصص في ملف نصي بلغة Python باستخدام الخلايا التي تبدأ بالأمر السحري %%writefile
، مثل ما يلي:
%%writefile code/evaluation.py
عامل التمكين الأساسي للوضع المحلي هو LocalPipelineSession
الكائن ، والذي يتم إنشاء مثيل له من Python SDK. توضح مقاطع التعليمات البرمجية التالية كيفية إنشاء خط أنابيب SageMaker في الوضع المحلي. على الرغم من أنه يمكنك تكوين مسار بيانات محلي للعديد من خطوات خطوط الأنابيب المحلية ، فإن Amazon S3 هو الموقع الافتراضي لتخزين إخراج البيانات عن طريق التحويل. الجديد LocalPipelineSession
يتم تمرير الكائن إلى Python SDK في العديد من استدعاءات SageMaker workflow API الموضحة في هذا المنشور. لاحظ أنه يمكنك استخدام ملف local_pipeline_session
متغير لاسترداد المراجع إلى الحاوية الافتراضية S3 واسم المنطقة الحالي.
قبل إنشاء خطوات خط الأنابيب الفردية ، قمنا بتعيين بعض المعلمات التي يستخدمها خط الأنابيب. بعض هذه المعلمات عبارة عن سلاسل حرفية ، في حين يتم إنشاء البعض الآخر كأنواع تعداد خاصة توفرها SDK. تضمن الكتابة التي تم تعدادها توفير الإعدادات الصالحة إلى خط الأنابيب ، مثل هذا الإعداد ، الذي يتم تمريره إلى ملف ConditionLessThanOrEqualTo
تنزل إلى أسفل:
mse_threshold = ParameterFloat(name="MseThreshold", default_value=7.0)
لإنشاء خطوة معالجة البيانات ، والتي تُستخدم هنا لأداء هندسة الميزات ، نستخدم SKLearnProcessor
لتحميل مجموعة البيانات وتحويلها. نجتاز ال local_pipeline_session
متغيرًا إلى مُنشئ الفئة ، والذي يوجه خطوة سير العمل للتشغيل في الوضع المحلي:
بعد ذلك ، نقوم بإنشاء أول خطوة فعلية لخط الأنابيب ، أ ProcessingStep
كائن ، كما تم استيراده من SageMaker SDK. يتم إرجاع وسيطات المعالج من استدعاء إلى SKLearnProcessor
طريقة التشغيل (). يتم دمج خطوة سير العمل هذه مع خطوات أخرى باتجاه نهاية دفتر الملاحظات للإشارة إلى ترتيب العملية داخل خط الأنابيب.
بعد ذلك ، نوفر رمزًا لإنشاء خطوة تدريب عن طريق إنشاء مثيل مقدر قياسي باستخدام SageMaker SDK. نجتاز نفس الشيء local_pipeline_session
متغير للمقدر ، المسمى xgb_train ، مثل sagemaker_session
جدال. نظرًا لأننا نريد تدريب نموذج XGBoost ، يجب علينا إنشاء عنوان URI صالح للصورة من خلال تحديد المعلمات التالية ، بما في ذلك إطار العمل والعديد من معلمات الإصدار:
يمكننا اختياريا استدعاء طرق مقدر إضافية ، على سبيل المثال set_hyperparameters()
، لتوفير إعدادات المعامل التشعبي لوظيفة التدريب. الآن بعد أن تم تكوين مقدر ، نحن جاهزون لإنشاء خطوة التدريب الفعلية. مرة أخرى ، نقوم باستيراد ملف TrainingStep
فصل دراسي من مكتبة SageMaker SDK:
بعد ذلك ، نبني خطوة معالجة أخرى لإجراء تقييم النموذج. يتم ذلك عن طريق إنشاء ملف ScriptProcessor
مثيل وتمرير local_pipeline_session
الكائن كمعامل:
لتمكين نشر النموذج المدرب ، إما إلى نقطة نهاية الوقت الحقيقي لـ SageMaker أو لتحويل دفعة ، نحتاج إلى إنشاء ملف Model
كائن عن طريق تمرير القطع الأثرية للنموذج ، و URI المناسب للصورة ، واختيارياً رمز الاستدلال المخصص لدينا. ثم نمرر هذا Model
يعترض على أ ModelStep
، والذي يضاف إلى خط الأنابيب المحلي. انظر الكود التالي:
بعد ذلك ، نقوم بإنشاء خطوة تحويل دفعي حيث نقوم بإرسال مجموعة من نواقل الميزات ونقوم بالاستدلال. نحتاج أولاً إلى إنشاء ملف Transformer
كائن وتمرير local_pipeline_session
المعلمة لها. ثم نقوم بإنشاء ملف TransformStep
، تمرير الحجج المطلوبة ، وإضافة هذا إلى تعريف خط الأنابيب:
أخيرًا ، نريد إضافة شرط فرع إلى سير العمل بحيث لا نقوم بتشغيل التحويل الدفعي إلا إذا كانت نتائج تقييم النموذج تفي بمعاييرنا. يمكننا الإشارة إلى هذا الشرطي بإضافة أ ConditionStep
بنوع شرط معين ، مثل ConditionLessThanOrEqualTo
. ثم نقوم بعد ذلك بتعداد خطوات الفرعين ، وتحديد الفروع if / else أو true / false لخط الأنابيب. خطوات if_steps المتوفرة في ملف ConditionStep
(الخطوة_إنشاء_النموذج, الخطوة_تحويل) عندما يتم تقييم الشرط إلى True
.
يوضح الرسم التخطيطي التالي هذا الفرع الشرطي وخطوات if / else المرتبطة به. يتم تشغيل فرع واحد فقط ، بناءً على نتيجة خطوة تقييم النموذج مقارنة بخطوة الشرط.
الآن بعد أن تم تحديد جميع خطواتنا ، وإنشاء مثيلات الفئة الأساسية ، يمكننا دمجها في خط أنابيب. نحن نقدم بعض المعلمات ، ونحدد ترتيب العملية بشكل حاسم عن طريق سرد الخطوات بالترتيب المطلوب. نلاحظ أن TransformStep
لا يظهر هنا لأنه هدف الخطوة الشرطية ، وقد تم توفيره كوسيطة خطوة إلى ConditionalStep
سابقا.
لتشغيل خط الأنابيب ، يجب عليك استدعاء طريقتين: pipeline.upsert()
، والذي يقوم بتحميل خط الأنابيب إلى الخدمة الأساسية ، و pipeline.start()
، والذي يبدأ تشغيل خط الأنابيب. يمكنك استخدام طرق أخرى متنوعة لاستجواب حالة التشغيل ، وسرد خطوات خط الأنابيب ، والمزيد. نظرًا لأننا استخدمنا جلسة خط أنابيب الوضع المحلي ، يتم تشغيل جميع هذه الخطوات محليًا على معالجك. يُظهر إخراج الخلية أسفل طريقة البدء الإخراج من خط الأنابيب:
من المفترض أن ترى رسالة أسفل إخراج الخلية مشابهة لما يلي:
Pipeline execution d8c3e172-089e-4e7a-ad6d-6d76caf987b7 SUCCEEDED
العودة إلى الموارد المدارة
بعد أن أكدنا أن خط الأنابيب يعمل بدون أخطاء ونحن راضون عن تدفق وشكل خط الأنابيب ، يمكننا إعادة إنشاء خط الأنابيب ولكن باستخدام موارد SageMaker المُدارة وإعادة تشغيله. التغيير الوحيد المطلوب هو استخدام PipelineSession
بدلا من LocalPipelineSession
:
تبدأ من sagemaker.workflow.pipeline_context استيراد LocalPipelineSessionfrom sagemaker.workflow.pipeline_context import PipelineSession
local_pipeline_session = LocalPipelineSession ()pipeline_session = PipelineSession()
يقوم هذا بإعلام الخدمة بتشغيل كل خطوة تشير إلى كائن الجلسة هذا على موارد SageMaker المُدارة. نظرًا للتغيير الصغير ، نوضح فقط التغييرات المطلوبة في الرمز في خلية الكود التالية ، ولكن يجب تنفيذ نفس التغيير على كل خلية باستخدام local_pipeline_session
هدف. ومع ذلك ، فإن التغييرات متطابقة في جميع الخلايا لأننا نستبدل فقط local_pipeline_session
كائن مع pipeline_session
موضوع.
بعد استبدال كائن الجلسة المحلية في كل مكان ، نقوم بإعادة إنشاء خط الأنابيب وتشغيله باستخدام موارد SageMaker المُدارة:
تنظيف
إذا كنت ترغب في الحفاظ على بيئة Studio مرتبة ، يمكنك استخدام الطرق التالية لحذف خط أنابيب SageMaker والنموذج. يمكن العثور على الكود الكامل في العينة مفكرة.
وفي الختام
حتى وقت قريب ، كان بإمكانك استخدام ميزة الوضع المحلي الخاصة بمعالجة SageMaker وتدريب SageMaker لتكرار معالجة وتدريب البرامج النصية محليًا ، قبل تشغيلها على جميع البيانات باستخدام موارد SageMaker المُدارة. مع ميزة الوضع المحلي الجديدة لخطوط أنابيب SageMaker ، يمكن لممارسي تعلم الآلة الآن تطبيق نفس الطريقة عند التكرار على خطوط أنابيب ML الخاصة بهم ، وربط تدفقات عمل ML المختلفة معًا. عندما يكون خط الأنابيب جاهزًا للإنتاج ، فإن تشغيله باستخدام موارد SageMaker المُدارة يتطلب فقط بضعة أسطر من تغييرات التعليمات البرمجية. هذا يقلل من وقت تشغيل خط الأنابيب أثناء التطوير ، مما يؤدي إلى تطوير خطوط الأنابيب بشكل أسرع مع دورات تطوير أسرع ، مع تقليل تكلفة الموارد المُدارة من SageMaker.
لمعرفة المزيد، يرجى زيارة خطوط أنابيب Amazon SageMaker or استخدم خطوط أنابيب SageMaker لتشغيل وظائفك محليًا.
عن المؤلفين
بول هارجيس ركز جهوده على التعلم الآلي في العديد من الشركات ، بما في ذلك AWS و Amazon و Hortonworks. إنه يستمتع ببناء الحلول التكنولوجية وتعليم الناس كيفية تحقيق أقصى استفادة منها. قبل دوره في AWS ، كان مهندسًا رائدًا في Amazon Exports and Expansions ، وساعد موقع amazon.com على تحسين تجربة المتسوقين الدوليين. يحب Paul مساعدة العملاء على توسيع مبادرات التعلم الآلي الخاصة بهم لحل مشاكل العالم الحقيقي.
نيكلاس بالم هو مهندس حلول في AWS في ستوكهولم ، السويد ، حيث يساعد العملاء عبر دول الشمال على النجاح في السحابة. إنه شغوف بشكل خاص بالتقنيات التي لا تحتاج إلى خادم إلى جانب إنترنت الأشياء والتعلم الآلي. خارج العمل ، Niklas هو متزلج عبر الريف ومتزلج على الجليد بالإضافة إلى غلاية بيض رئيسية.
كيريت ثاداكا هو مهندس حلول ML يعمل في فريق SageMaker Service SA. قبل انضمامه إلى AWS ، عمل Kirit في شركات ناشئة في مرحلة مبكرة من الذكاء الاصطناعي ، تلتها بعض الوقت في الاستشارات في أدوار مختلفة في أبحاث الذكاء الاصطناعي ، و MLOps ، والقيادة التقنية.
- متقدم (300،XNUMX)
- AI
- ai الفن
- مولد الفن ai
- الروبوت ai
- AIML
- الأمازون SageMaker
- Amazon SageMaker الطيار الآلي
- الذكاء الاصطناعي
- شهادة الذكاء الاصطناعي
- الذكاء الاصطناعي في البنوك
- روبوت ذكاء اصطناعي
- روبوتات الذكاء الاصطناعي
- برنامج ذكاء اصطناعي
- التعلم الآلي من AWS
- سلسلة كتلة
- مؤتمر blockchain ai
- عملة عبقرية
- الذكاء الاصطناعي للمحادثة
- مؤتمر التشفير ai
- دال
- التعلم العميق
- google ai
- آلة التعلم
- أفلاطون
- أفلاطون ع
- الذكاء افلاطون البيانات
- لعبة أفلاطون
- أفلاطون داتا
- بلاتوغمينغ
- مقياس ai
- بناء الجملة
- الكيفية الفنية
- زفيرنت