2

我们使用 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使用以下代码获取正在使用的 s 数量的方法:

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;
        }
    }
}

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

或者,我还没有找到一种方法来根据我们在创建新池时使用的属性来获取分配给每个内核的数量。ComputeNodevirtualMachineSize

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

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

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

谢谢。

4

1 回答 1

3

您可以通过将上面使用的Azure Batch .NET SDKAzure Management .NET SDK结合使用来做到这一点。或者,您可以使用Azure Batch Management .NET SDK按需获取 Batch 帐户的核心配额。

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