إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يمكنك تعظيم استخدام الموارد على عدد أقل من عقد الحوسبة في مجموعتك عن طريق تشغيل أكثر من مهمة واحدة في نفس الوقت على كل عقدة.
بينما تعمل بعض السيناريوهات بشكل أفضل مع تخصيص جميع موارد العقدة لمهمة واحدة، قد تؤدي بعض الأحمال إلى تقليل أوقات العمل وانخفاض التكاليف عندما تتشارك عدة مهام تلك الموارد. ضع في الاعتبار السيناريوهات التالية:
- تقليل نقل البيانات للمهام التي يمكنها مشاركة البيانات. يمكنك تقليل رسوم نقل البيانات بشكل كبير عن طريق نسخ البيانات المشتركة إلى عدد أقل من العقد، ثم تنفيذ المهام بالتوازي على كل عقدة. تنطبق هذه الاستراتيجية بشكل خاص إذا كان يجب نقل البيانات التي يجب نسخها إلى كل عقدة بين المناطق الجغرافية.
- تعظيم استخدام الذاكرة للمهام التي تتطلب كمية كبيرة من الذاكرة، ولكن فقط خلال فترات زمنية قصيرة، وفي أوقات متغيرة أثناء التنفيذ. يمكنك استخدام عقد حوسبة أقل، لكنها أكبر حجما، مع ذاكرة أكبر للتعامل مع مثل هذه الارتفاعات بكفاءة. هذه العقد لديها عدة مهام تعمل بالتوازي على كل عقدة، لكن كل مهمة يمكنها الاستفادة من الذاكرة الوفيرة للعقد في أوقات مختلفة.
- قم بتقليل حدود عدد العقد عندما يكون التواصل بين العقد مطلوبا داخل المجموعة. حاليا، تقيد مجموعات الاتصال بين العقد 50 عقدة حسابية. إذا كانت كل عقدة في مثل هذا التجمع قادرة على تنفيذ المهام بالتوازي، يمكن تنفيذ عدد أكبر من المهام في نفس الوقت.
- قم بتكرار عنقود حوسبة محلي، مثل عند نقل بيئة حوسبة إلى Azure. إذا كان الحل المحلي الحالي لديك ينفذ عدة مهام لكل عقدة حسابية، يمكنك زيادة الحد الأقصى لعدد مهام العقدة لتناسب هذا التكوين بشكل أوثق.
سيناريو كمثال
كمثال، تخيل تطبيق مهمة بمتطلبات وحدة المعالجة المركزية والذاكرة بحيث تكون Standard_D1 العقد كافية. ومع ذلك، لإنهاء العمل في الوقت المطلوب، هناك حاجة إلى 1000 من هذه العقد.
بدلا من استخدام Standard_D1 العقد التي تحتوي على نواة وحدة معالجة مركزية واحدة، يمكنك استخدام Standard_D14 عقد تحتوي كل منها على 16 نواة، وتمكين تنفيذ المهام المتوازية. يمكنك استخدام عدد أقل بمقدار 16 مرة بدلا من 1000 عقدة، وسيكون مطلوبا فقط 63 عقدة. إذا كانت هناك حاجة لملفات تطبيقات كبيرة أو بيانات مرجعية لكل عقدة، فإن مدة العمل وكفاءتها تتحسن، حيث يتم نسخ البيانات إلى 63 عقدة فقط.
تمكين تنفيذ المهام المتوازية
تقوم بتكوين عقد الحوسبة لتنفيذ المهام المتوازية على مستوى المجموعة. مع مكتبة Batch .NET، قم بتعيين خاصية CloudPool.TaskSlotsPerNode عند إنشاء تجمع. إذا كنت تستخدم واجهة برمجة التطبيقات Batch REST، قم بتعيين عنصر taskSlotsPerNode في جسم الطلب أثناء إنشاء المجموعة.
ملاحظة
يمكنك تعيين taskSlotsPerNode العنصر وخاصية TaskSlotsPerNode فقط عند وقت إنشاء المجموعة. لا يمكن تعديلها بعد إنشاء مجموعة بالفعل.
يتيح Azure Batch تعيين فتحات المهام لكل عقدة حتى (4x) عدد نوى العقد. على سبيل المثال، إذا تم تكوين المجموعة بعقد بحجم "كبير" (أربع نوى)، فقد taskSlotsPerNode يتم ضبطها إلى 16. ومع ذلك، بغض النظر عن عدد النوى التي تحتوي على العقدة، لا يمكنك أن يكون لديك أكثر من 256 خانة مهمة لكل عقدة. للحصول على تفاصيل حول عدد الأنوية لكل حجم من العقد، انظر أحجام خدمات السحابة (الكلاسيكية). لمزيد من المعلومات حول حدود الخدمة، راجع حصص الخدمة الدفعية والحدود.
تلميح
تأكد من أخذ القيمة في الاعتبار taskSlotsPerNode عند بناء صيغة التدرج التلقائي لمجموعتك. على سبيل المثال، قد تتأثر صيغة تقيم $RunningTasks بشكل كبير بزيادة في المهام لكل عقدة. لمزيد من المعلومات، راجع إنشاء صيغة تلقائية لتوسيع عقد الحوسبة في تجمع الدفعات.
تحديد توزيع المهام
عند تفعيل المهام المتزامنة، من المهم تحديد كيفية توزيع المهام عبر العقد في المجموعة.
باستخدام خاصية CloudPool.TaskSchedulingPolicy (سياسة CloudPool.TaskScheduling )، يمكنك تحديد أن المهام يجب أن تخصص بالتساوي عبر جميع العقد في المجموعة ("الانتشار"). أو يمكنك تحديد أنه يجب تخصيص أكبر عدد ممكن من المهام لكل عقدة قبل تعيين المهام لعقدة أخرى في المجموعة ("التعبئة").
كمثال، خذ في تجمع Standard_D14 العقد (في المثال السابق) الذي تم تكوينه بقيمة CloudPool.TaskSlotsPerNode بقيمة 16. إذا تم تكوين سياسة CloudPool.TaskSchedulingPolicy بحزمة ComputeNodeFillType من الحزمة، فإنها ستعظم استخدام جميع النواة الستة عشر في كل عقدة وتسمح لتجمع التدرج التلقائي بإزالة العقد غير المستخدمة (العقد التي لا يتم تعيين أي مهام) من التجمع. التعديل التلقائي يقلل من استخدام الموارد ويمكن أن يوفر المال.
حدد فتحات المتغيرات لكل مهمة
يمكن تعريف مهمة باستخدام خاصية CloudTask.RequiredSlots التي تحدد عدد الفتحات المطلوبة لتشغيلها على عقدة الحوسبة. القيمة الافتراضية هي 1. يمكنك تعيين فتحات مهام متغيرة إذا كانت مهامك لها أوزان مختلفة مرتبطة باستخدامها للموارد على عقدة الحوسبة. تسمح فتحات المهام المتغيرة لكل عقدة حوسبة بوجود عدد معقول من المهام الجارية في نفس الوقت دون أن تكون موارد النظام مثل المعالج أو الذاكرة.
على سبيل المثال، في مجموعة تحتوي على خاصية taskSlotsPerNode = 8، يمكنك تقديم مهام تتطلب معالجا مكثفا متعددة النوى مع requiredSlots = 8، بينما يمكن تعيين مهام أخرى على requiredSlots = 1. عندما يتم جدولة هذا العبء المختلط، تعمل المهام المكثفة للمعالج حصريا على عقد الحوسبة الخاصة بها، بينما يمكن لمهام أخرى العمل في نفس الوقت (حتى ثماني مهام في آن واحد) على عقد أخرى. يساعدك عبء العمل المختلط على موازنة عبء العمل عبر عقد الحوسبة وتحسين كفاءة استخدام الموارد.
تأكد من عدم تحديد requiredSlots المهام لتكون أكبر من مجموعة taskSlotsPerNodeالمهام ، وإلا فلن تعمل المهمة أبدا. خدمة الدفعات لا تتحقق حاليا من صحة هذا التعارض عند تقديم المهام. هذا لا يؤكد التضارب، لأن الوظيفة قد لا يكون لديها تجمع مقيد عند وقت التقديم، أو قد تتغير إلى تجمع آخر عن طريق تعطيل/إعادة التفعيل.
تلميح
عند استخدام فتحات المهام المتغيرة، من الممكن أن تفشل المهام الكبيرة التي تتطلب المزيد من الفتحات مؤقتا في الجدولة بسبب عدم توفر عدد كاف من الفتحات على أي عقدة حسابية، حتى عندما لا تزال هناك فتحات خاملة في بعض العقد. يمكنك رفع أولوية الوظيفة لهذه المهام لزيادة فرصها في المنافسة على الأماكن المتاحة في العقد.
تقوم خدمة الدفعة بإرسال حدث TaskScheduleFailEvent عندما تفشل في جدولة مهمة للتشغيل وتستمر في إعادة محاولة الجدولة حتى تتوفر الفتحات المطلوبة. يمكنك الاستماع إلى هذا الحدث لاكتشاف مشاكل جدولة المهام المحتملة والتخفيف من حدوثها بناء على ذلك.
مثال على .NET في الدفعة
توضح مقتطفات كود API الخاصة ب .NET الدفعية التالية كيفية إنشاء تجمع يحتوي على عدة فتحات مهام لكل عقدة وكيفية تقديم مهمة بفتحات مطلوبة.
أنشئ مجموعة تحتوي على عدة فتحات مهام لكل عقدة
يظهر هذا المقطع من الكود طلبا لإنشاء تجمع يحتوي على أربع عقد، مع السماح بأربع فتحات مهام لكل عقدة. يحدد سياسة جدولة المهام التي تملأ كل عقدة بمهام قبل تعيين المهام لعقدة أخرى في المجموعة.
لمزيد من المعلومات حول إضافة مجموعات باستخدام واجهة برمجة تطبيقات Batch .NET، راجع BatchClient.PoolOperations.CreatePool.
CloudPool pool =
batchClient.PoolOperations.CreatePool(
poolId: "mypool",
targetDedicatedComputeNodes: 4
virtualMachineSize: "standard_d1_v2",
VirtualMachineConfiguration: new VirtualMachineConfiguration(
imageReference: new ImageReference(
publisher: "MicrosoftWindowsServer",
offer: "WindowsServer",
sku: "2019-datacenter-core",
version: "latest"),
nodeAgentSkuId: "batch.node.windows amd64");
pool.TaskSlotsPerNode = 4;
pool.TaskSchedulingPolicy = new TaskSchedulingPolicy(ComputeNodeFillType.Pack);
pool.Commit();
أنشئ مهمة بفتحات زمنية مطلوبة
هذا المقتطف من الكود ينشئ مهمة ب nondefault requiredSlots. تعمل هذه المهمة عندما تتوفر عدد كاف من الفتحات الفارغة على عقدة الحوسبة.
CloudTask task = new CloudTask(taskId, taskCommandLine)
{
RequiredSlots = 2
};
قائمة عقد الحوسبة مع أعداد للمهام والفتحات الجارية
يسرد هذا المقتطف الكودي جميع عقد الحوسبة في المجموعة ويطبع أعداد المهام الجارية وفتحات المهام لكل عقدة.
ODATADetailLevel nodeDetail = new ODATADetailLevel(selectClause: "id,runningTasksCount,runningTaskSlotsCount");
IPagedEnumerable<ComputeNode> nodes = batchClient.PoolOperations.ListComputeNodes(poolId, nodeDetail);
await nodes.ForEachAsync(node =>
{
Console.WriteLine(node.Id + " :");
Console.WriteLine($"RunningTasks = {node.RunningTasksCount}, RunningTaskSlots = {node.RunningTaskSlotsCount}");
}).ConfigureAwait(continueOnCapturedContext: false);
قائمة أعداد المهام للمهمة
يحصل هذا المقتطف على عدد المهام للمهمة، والذي يشمل كل من المهام وعدد فتحات المهام لكل حالة مهمة.
TaskCountsResult result = await batchClient.JobOperations.GetJobTaskCountsAsync(jobId);
Console.WriteLine("\t\tActive\tRunning\tCompleted");
Console.WriteLine($"TaskCounts:\t{result.TaskCounts.Active}\t{result.TaskCounts.Running}\t{result.TaskCounts.Completed}");
Console.WriteLine($"TaskSlotCounts:\t{result.TaskSlotCounts.Active}\t{result.TaskSlotCounts.Running}\t{result.TaskSlotCounts.Completed}");
مثال على REST الدفعي
توضح مقتطفات كود API الدفعية التالية كيفية إنشاء تجمع يحتوي على عدة فتحات مهام لكل عقدة وكيفية تقديم مهمة بفتحات مطلوبة.
أنشئ مجموعة تحتوي على عدة فتحات مهام لكل عقدة
يظهر هذا المقطع طلبا لإنشاء تجمع يحتوي على عقدتين كبيرتين مع حد أقصى لأربع مهام لكل عقدة.
لمزيد من المعلومات حول إضافة مجموعات باستخدام واجهة برمجة تطبيقات REST، راجع إضافة تجمع إلى حساب.
{
"odata.metadata":"https://myaccount.myregion.batch.azure.com/$metadata#pools/@Element",
"id":"mypool",
"vmSize":"large",
"virtualMachineConfiguration": {
"imageReference": {
"publisher": "canonical",
"offer": "ubuntuserver",
"sku": "20.04-lts"
},
"nodeAgentSKUId": "batch.node.ubuntu 20.04"
},
"targetDedicatedComputeNodes":2,
"taskSlotsPerNode":4,
"enableInterNodeCommunication":true,
}
أنشئ مهمة بفتحات زمنية مطلوبة
يظهر هذا المقطع طلبا لإضافة مهمة ب غير افتراضي requiredSlots. تعمل هذه المهمة فقط عندما تتوفر فتحات كافية على عقدة الحوسبة.
{
"id": "taskId",
"commandLine": "bash -c 'echo hello'",
"userIdentity": {
"autoUser": {
"scope": "task",
"elevationLevel": "nonadmin"
}
},
"requiredSLots": 2
}
نموذج كود على GitHub
يوضح مشروع ParallelTasks على GitHub استخدام خاصية CloudPool.TaskSlotsPerNode .
يستخدم تطبيق وحدة تحكم C# هذا مكتبة Batch .NET لإنشاء تجمع مع عقدة أو أكثر من العقدة الحاسوبية. يقوم بتنفيذ عدد قابل للتكوين من المهام على تلك العقد لمحاكاة حمل متغير. يظهر الناتج من التطبيق أي العقد نفذت كل مهمة. كما يوفر التطبيق ملخصا لمعايير المهمة ومدة الوظيفة.
المثال التالي يوضح الجزء الملخص من الإخراج من تشغيلين مختلفين لتطبيق ParallelTasks النموذجي. مدة المهام المعروضة هنا لا تشمل وقت إنشاء المجموعة، حيث تم تقديم كل مهمة إلى مجموعة تم إنشاؤها مسبقا وكانت عقد الحوسبة الخاصة بها في حالة الخمول وقت التقديم.
يظهر التنفيذ الأول لتطبيق العينة أنه مع وجود عقدة واحدة في المجموعة والإعداد الافتراضي لمهمة واحدة لكل عقدة، فإن مدة المهمة تزيد عن 30 دقيقة.
Nodes: 1
Node size: large
Task slots per node: 1
Max slots per task: 1
Tasks: 32
Duration: 00:30:01.4638023
تظهر الجولة الثانية من العينة انخفاضا كبيرا في مدة العمل. هذا التقليل يعود إلى أن المجموعة كانت مهيأة بأربع مهام لكل عقدة، مما يسمح بتنفيذ المهام المتوازية لإكمال المهمة في ما يقرب من ربع الوقت.
Nodes: 1
Node size: large
Task slots per node: 4
Max slots per task: 1
Tasks: 32
Duration: 00:08:48.2423500