gpt4 book ai didi

c# - 如何以编程方式获取 Azure Batch 节点中的核心数量?

转载 作者:行者123 更新时间:2023-11-30 21:39:38 32 4
gpt4 key购买 nike

我们使用 Azure Batch 服务来运行一些计算引擎代码,并在创建池时指定 VM 的大小:

var pool = batchClient.PoolOperations.CreatePool(poolId: $"{PoolIdPrefix}-{poolGuid}", virtualMachineSize: "STANDARD_G4", cloudServiceConfiguration: new CloudServiceConfiguration(osFamily: "4"), targetDedicatedComputeNodes: 31, targetLowPriorityComputeNodes: 0);

注意:targetDedicatedComputeNodes 目前是硬编码的,但一旦此问题得到解决,将会更改。

使用它,我们决定虚拟机大小,在本例中,恰好有 16 个核心。

问题是,在执行此代码之前,我们需要检查当前现有的池并计算(或最好只是读取)当前正在使用的核心数量,以了解何时可以使用所需的核心数量创建另一个池(以及节点)。

一个例子是,如果我们有 160 个核心的限制(因此具有此配置的 10 个节点),并且我们想要创建一个本身使用 120 个核心的池,然后在该池创建并开始执行后,我们有另一个想要创建的池。这个新池还需要 120 个核心,因此我们需要能够告诉新池等待,因为没有足够的核心可供创建。

我找到了一种使用以下代码获取正在使用的 ComputeNode 数量的方法:

var batchManagementClient = new BatchManagementClient(new TokenCredentials(token))
{
SubscriptionId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
};

var currentNodes = 0;
using (var batchClient = BatchClient.Open(credentials))
{
var pools = batchClient.PoolOperations.ListPools();
foreach (var cloudPool in pools)
{
if (cloudPool.CurrentDedicatedComputeNodes != null)
{
currentNodes += cloudPool.CurrentDedicatedComputeNodes.Value;
}
}
}

这里的问题是,ComputeNode没有任何属性告诉我它有/正在使用多少个核心,而且我还没有找到任何类似 ManagementClient 的类,或任何其他类或方法,以获取给定池或所有池中正在使用的核心数,或者单个 ComputeNode 已分配给它的核心数。

或者,我还没有找到一种方法来获取基于 virtualMachineSize 属性分配给每个 ComputeNode 的核心数量我们在创建新池时也会使用它。

对此的任何帮助将不胜感激,因为我宁愿获取代码中的核心数量,以防止 Microsoft 将来可能对 virtualMachineSize 进行任何大小更改,否则我将不得不努力根据我们指定的 VM 大小对核心数量进行编码。

注意:似乎有一个 Powershell CMDlet它获取给定位置中所有池的当前使用的核心和可用核心的限制,并且 Azure 门户池边栏选项卡显示一个表,其中包含报告当前使用的核心的可选列。所以我认为这在 C# 中也应该是可能的。

如果我可以提供任何其他信息,请告诉我。

谢谢。

最佳答案

您可以通过组合Azure Batch .NET SDK来做到这一点正如您在上面将其与 Azure Management .NET SDK 一起使用一样。或者,您可以使用 Azure Batch Management .NET SDK 按需获取 Batch 帐户的核心配额。 .

  1. 首先获取list of your CloudPools在您的帐户中。
  2. 对于您帐户中的每个批处理池,获取 VirtualMachineSize字符串和 CurrentDedicatedComputeNodes数数。请注意,专用计数与低优先级计数(和配额)是分开的。
  3. 获取list of VirtualMachineSizes使用 Azure 管理 SDK(计算)查找 Batch 帐户所在的区域。这将返回 VirtualMachineSize 的可迭代列表,您可以获取与 #2 相关的相应 VirtualMachineSize 的 numberOfCores
  4. SumAllBatchPools(VirtualMachineSize.numberOfCores * CurrentDedicatedComputeNodes) 的计算结果
  5. 可以选择查询您的批量帐户 core quota使用 Azure Batch Management .NET API 并计算与 #5 的差异,以获得 Batch 帐户的即时可用核心配额。

关于c# - 如何以编程方式获取 Azure Batch 节点中的核心数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45083524/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com