Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A készlet kisebb számú számítási csomópontján maximalizálhatja az erőforrás-használatot, ha egyszerre több feladatot futtat az egyes csomópontokon.
Bár egyes forgatókönyvek a csomópontok egyetlen tevékenységhez dedikált összes erőforrásával működnek a legjobban, bizonyos számítási feladatok rövidebb feladatidőket és alacsonyabb költségeket tapasztalhatnak, ha több tevékenység osztozik ezen erőforrásokon. Vegyük példaként a következő forgatókönyveket:
- Az adatok megosztására képes feladatok adatátvitelének minimalizálása. Jelentősen csökkentheti az adatátviteli díjakat, ha a megosztott adatokat kisebb számú csomópontra másolja, majd az egyes csomópontokon párhuzamosan hajtja végre a feladatokat. Ez a stratégia különösen akkor érvényes, ha az egyes csomópontokra másolandó adatokat át kell vinni a földrajzi régiók között.
- Maximalizálja a memóriahasználatot olyan feladatok esetében, amelyek nagy mennyiségű memóriát igényelnek, de csak rövid időszakokban és a végrehajtás során változó időpontokban. Kevesebb, de nagyobb számítási csomópontot használhat több memóriával az ilyen csúcsok hatékony kezeléséhez. Ezek a csomópontok több feladatot futtatnak párhuzamosan az egyes csomópontokon, de minden tevékenység különböző időpontokban kihasználhatja a csomópontok bőséges memóriáját.
- Mérsékelje a csomópontok számának korlátait , ha a csomópontok közötti kommunikációra szükség van egy készleten belül. A csomópontok közötti kommunikációhoz konfigurált készletek jelenleg 50 számítási csomópontra korlátozódnak. Ha egy ilyen készlet minden csomópontja képes párhuzamosan végrehajtani a feladatokat, több tevékenység is végrehajtható egyszerre.
- Saját telephelyi számítási fürt replikálása, például amikor először számítási környezetet helyez át az Azure-felhőbe. Ha az aktuális helyszíni megoldás számítási csomópontonként több feladatot hajt végre, növelheti a csomóponttevékenységek maximális számát, hogy jobban tükrözhesse ezt a konfigurációt.
Példaforgatókönyv
Képzeljen el például egy olyan feladatalkalmazást, amely processzor- és memóriaigényekkel rendelkezik, például Standard_D1 csomópontok elegendőek. Ahhoz azonban, hogy a feladat a szükséges időben befejeződjön, 1000 csomópontra van szükség.
Ahelyett, hogy egy processzormaggal rendelkező Standard_D1 csomópontokat használna, Standard_D14 16 maggal rendelkező csomópontokat használhat, és engedélyezheti a párhuzamos feladatvégrehajtást. 1000 csomópont helyett akár 16-szor kevesebb csomópontot is használhat, csak 63-ra lenne szükség. Ha minden csomóponthoz nagy alkalmazásfájlokra vagy referenciaadatokra van szükség, a feladat időtartama és hatékonysága javul, mivel az adatok csak 63 csomópontra vannak átmásolva.
Párhuzamos feladatvégrehajtás engedélyezése
A számítási csomópontokat a készlet szintjén konfigurálhatja a párhuzamos feladatvégrehajtáshoz. A Batch .NET könyvtárban állítsa be a BatchAccountPoolData.TaskSlotsPerNode tulajdonságot a készlet létrehozásakor. Ha a Batch REST API-t használja, állítsa be a taskSlotsPerNode elemet a kérelem törzsében a készlet létrehozása során.
Megjegyzés:
A taskSlotsPerNode elemet és a TaskSlotsPerNode tulajdonságot csak a készlet létrehozása során állíthatja be. A készlet létrehozása után nem módosíthatók.
Az Azure Batch lehetővé teszi a csomópontonkénti feladathelyek beállítását a csomópontmagok számának (4x) értékére. Ha például a készlet "Nagy" méretű csomópontokkal (négy maggal) van konfigurálva, akkor taskSlotsPerNode lehet, hogy 16-ra van állítva. Függetlenül attól, hogy hány maggal rendelkezik a csomópont, csomópontonként nem lehet több, mint 256 feladathely. Az egyes csomópontméretekhez tartozó magok számáról további információt a Cloud Services méretei (klasszikus) című témakörben talál. A szolgáltatáskorlátokról további információt a Batch szolgáltatáskvóták és -korlátok című témakörben talál.
Jótanács
Ügyeljen arra, hogy figyelembe vegye az taskSlotsPerNode értéket, amikor automatikus skálázási képletet hoz létre a készlethez. Például egy $RunningTasks képlet kiértékelését jelentősen befolyásolhatja a csomópontonkénti feladatok számának növekedése. További információ: Automatikus képlet létrehozása számítási csomópontok skálázására a Batch-készletben.
Tevékenységelosztás megadása
Az egyidejű tevékenységek engedélyezésekor fontos megadni, hogy a tevékenységek hogyan legyenek elosztva a készlet csomópontjai között.
A BatchAccountPoolData.TaskSchedulingPolicy tulajdonság használatával megadhatja, hogy a tevékenységeket egyenletesen kell hozzárendelni a készlet összes csomópontjához ("szórás"). Megadhatja azt is, hogy minden csomóponthoz a lehető legtöbb feladatot rendeljük, mielőtt a feladatokat a pool másik csomópontjához rendeljük ("packing").
Vegyük példaként a(z) Standard_D14 csomópontok készletét (az előző példában), amelynek a BatchAccountPoolData.TaskSlotsPerNode értéke 16. Ha a BatchAccountPoolData.TaskSchedulingPolicy a BatchNodeFillTypePack értékére van állítva, az maximalizálja az egyes csomópontok mind a 16 magjának kihasználtságát, és lehetővé teszi, hogy az automatikusan skálázódó készlet eltávolítsa a készletből a nem használt csomópontokat (azokat a csomópontokat, amelyekhez nincs feladat hozzárendelve). Az automatikus skálázás minimalizálja az erőforrás-használatot, és pénzt takaríthat meg.
Változóhelyek definiálása tevékenységenként
Egy feladat definiálható a BatchTaskCreateOptions.RequiredSlots tulajdonsággal, amely megadja, hogy hány tárolóhelyre van szükség a számítási csomóponton való futtatáshoz. Az alapértelmezett érték 1. Változó feladathelyeket akkor állíthat be, ha a tevékenységek különböző súlyokkal vannak társítva az erőforrás-használatukhoz a számítási csomóponton. A változó feladathelyek lehetővé teszik, hogy az egyes számítási csomópontok ésszerű számú egyidejűleg futó feladatokkal rendelkezzenek anélkül, hogy túlterhelnék a rendszer erőforrásait, például a processzort vagy a memóriát.
Például egy taskSlotsPerNode = 8 tulajdonsággal rendelkező erőforráskészlet esetében, többmagos, CPU-igényes feladatokat requiredSlots = 8 küldhet be, míg más tevékenységek beállíthatók requiredSlots = 1. Ha ez a vegyes számítási feladat ütemezve van, a processzorigényes tevékenységek kizárólag a számítási csomópontjaikon futnak, míg más tevékenységek egyidejűleg (egyszerre legfeljebb nyolc feladat) futhatnak más csomópontokon. A vegyes számítási feladatok segítségével kiegyensúlyozza számítási feladatait a számítási csomópontok között, és javíthatja az erőforrás-használat hatékonyságát.
Győződjön meg arról, hogy nem ad meg egy feladat requiredSlots-ot, ami nagyobb, mint a medence taskSlotsPerNode, mert akkor a feladat soha nem fog futni. A Batch szolgáltatás jelenleg nem ellenőrzi ezt az ütközést a tevékenységek elküldésekor. Nem érvényesíti az ütközést, mert előfordulhat, hogy egy feladat nem rendelkezik hozzárendelt erőforráskészlettel a benyújtásakor, vagy a letiltás/újraengedélyezés révén másik erőforráskészletre válthat.
Jótanács
Változó feladathelyek használata esetén előfordulhat, hogy a több szükséges ponttal rendelkező nagy feladatok ütemezése ideiglenesen meghiúsulhat, mert nem áll rendelkezésre elegendő tárolóhely egyetlen számítási csomóponton sem, még akkor is, ha egyes csomópontokon még mindig üresjárati pontok találhatók. A feladatok prioritásának növelésével növelheti a csomópontokon elérhető pontokért való versengés esélyét.
A Batch szolgáltatás kibocsátja a TaskScheduleFailEventet , ha nem ütemezi a feladat futtatását, és addig próbálkozik újra az ütemezéssel, amíg a szükséges pontok elérhetővé nem válnak. Az eseményt meghallgatva észlelheti a lehetséges feladatütemezési problémákat, és ennek megfelelően enyhítheti azokat.
Batch .NET példa
Az alábbi Batch .NET API-kódrészletek bemutatják, hogyan hozhat létre csomópontonként több feladatpontot tartalmazó készletet, és hogyan küldhet el feladatokat a szükséges tárolóhelyekkel.
Csomópontonként több feladatpontot tartalmazó készlet létrehozása
Ez a kódrészlet egy négy csomópontot tartalmazó készlet létrehozására irányuló kérést jelenít meg, csomópontonként négy feladathelyet engedélyezve. Olyan feladatütemezési szabályzatot ad meg, amely az egyes csomópontot feladatokkal feltölti, mielőtt feladatokat rendel a csoport egy másik csomópontjához.
A készletek Batch .NET API használatával történő hozzáadásáról további információt a BatchAccountPoolCollection.CreateOrUpdate című témakörben talál.
BatchAccountPoolData poolData = new BatchAccountPoolData()
{
VmSize = "standard_d1_v2",
DeploymentConfiguration = new BatchDeploymentConfiguration()
{
VmConfiguration = new BatchVmConfiguration(
imageReference: new BatchImageReference()
{
Publisher = "MicrosoftWindowsServer",
Offer = "WindowsServer",
Sku = "2019-datacenter-core",
Version = "latest"
},
nodeAgentSkuId: "batch.node.windows amd64")
},
ScaleSettings = new BatchAccountPoolScaleSettings()
{
FixedScale = new BatchAccountFixedScaleSettings() { TargetDedicatedNodes = 4 }
},
TaskSlotsPerNode = 4,
TaskSchedulingPolicy = new Azure.ResourceManager.Batch.Models.BatchTaskSchedulingPolicy(
Azure.ResourceManager.Batch.Models.BatchNodeFillType.Pack)
};
await batchAccount.GetBatchAccountPools().CreateOrUpdateAsync(WaitUntil.Completed, "mypool", poolData);
Feladat létrehozása a szükséges tárolóhelyekkel
Ez a kódrészlet létrehoz egy nem alapértelmezett requiredSlots feladatot. Ez a feladat akkor fut, ha elegendő szabad hely áll rendelkezésre egy számítási csomóponton.
BatchTaskCreateOptions task = new BatchTaskCreateOptions(taskId, taskCommandLine)
{
RequiredSlots = 2
};
Futó feladatok és rendelkezésre álló helyek számával rendelkező számítási csomópontok listázása
Ez a kódrészlet felsorolja a készlet összes számítási csomópontját, és csomópontonként kinyomtatja a feladatok és a feladathelyek futtatásának számát.
await foreach (BatchNode node in batchClient.GetNodesAsync(
poolId,
select: new[] { "id", "runningTasksCount", "runningTaskSlotsCount" }))
{
System.Console.WriteLine(node.Id + " :");
System.Console.WriteLine($"RunningTasks = {node.RunningTasksCount}, RunningTaskSlots = {node.RunningTaskSlotsCount}");
}
A munka feladatainak számának listázása
Ez a kódrészlet lekéri a feladat tevékenységszámát, amely a tevékenységek és a tevékenységhelyek számát is tartalmazza tevékenységállapotonként.
BatchTaskCountsResult result = await batchClient.GetJobTaskCountsAsync(jobId);
System.Console.WriteLine("\t\tActive\tRunning\tCompleted");
System.Console.WriteLine($"TaskCounts:\t{result.TaskCounts.Active}\t{result.TaskCounts.Running}\t{result.TaskCounts.Completed}");
System.Console.WriteLine($"TaskSlotCounts:\t{result.TaskSlotCounts.Active}\t{result.TaskSlotCounts.Running}\t{result.TaskSlotCounts.Completed}");
Batch REST-példa
Az alábbi Batch REST API-kódrészletek bemutatják, hogyan hozhat létre csomópontonként több feladathelyet tartalmazó készletet, és hogyan küldhet el feladatokat a szükséges tárolóhelyekkel.
Csomópontonként több feladatpontot tartalmazó készlet létrehozása
Ez a kódrészlet egy olyan készlet létrehozására irányuló kérést jelenít meg, amely csomópontonként legfeljebb négy feladatot tartalmazó két nagy csomópontot tartalmaz.
A készletek REST API-val történő hozzáadásáról további információt a Készlet hozzáadása fiókhoz című témakörben talál.
{
"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,
}
Feladat létrehozása a szükséges tárolóhelyekkel
Ez a kódrészlet egy olyan kérést jelenít meg, amely nem szabályszerű feladat hozzáadását requiredSlotskéri. Ez a feladat csak akkor fut, ha elegendő szabad hely áll rendelkezésre a számítási csomóponton.
{
"id": "taskId",
"commandLine": "bash -c 'echo hello'",
"userIdentity": {
"autoUser": {
"scope": "task",
"elevationLevel": "nonadmin"
}
},
"requiredSLots": 2
}
Kódminta a GitHubon
A GitHub ParallelTasks projektje a BatchAccountPoolData.TaskSlotsPerNode tulajdonság használatát mutatja be.
Ez a C#-konzolalkalmazás a Batch .NET-kódtár használatával hoz létre egy készletet egy vagy több számítási csomóponttal. Konfigurálható számú feladatot hajt végre ezeken a csomópontokon a változó terhelés szimulálásához. Az alkalmazás kimenete azt mutatja, hogy mely csomópontok hajtották végre az egyes feladatokat. Az alkalmazás a feladat paramétereinek és időtartamának összegzését is tartalmazza.
Az alábbi példa a ParallelTasks mintaalkalmazás két különböző futtatásából származó kimenet összefoglaló részét mutatja be. Az itt látható feladat-időtartamok nem tartalmazzák a készletlétrehozási időt, mivel minden feladatot egy korábban létrehozott készletbe küldtek, amelynek számítási csomópontjai tétlen állapotban voltak a beküldéskor.
A mintaalkalmazás első végrehajtása azt mutatja, hogy a készletben egyetlen csomópont és csomópontonként egy tevékenység alapértelmezett beállítása esetén a feladat időtartama több mint 30 perc.
Nodes: 1
Node size: large
Task slots per node: 1
Max slots per task: 1
Tasks: 32
Duration: 00:30:01.4638023
A minta második futtatása a feladat időtartamának jelentős csökkenését mutatja. Ennek a csökkentésnek az az oka, hogy a készlet csomópontonként négy tevékenységgel lett konfigurálva, ami lehetővé teszi, hogy a párhuzamos feladat végrehajtása majdnem negyed idő alatt befejezze a feladatot.
Nodes: 1
Node size: large
Task slots per node: 4
Max slots per task: 1
Tasks: 32
Duration: 00:08:48.2423500