Azure 管理、Weights & Biases、.NET

azure-mgmt-weightsandbiases-dotnet
分类通用
作者Agentic Awesome Skills 社区
许可MIT
评分4.20/5
使用4.8K

Azure.ResourceManager.WeightsAndBiases (.NET)

用于通过 Azure Marketplace 部署和管理 Weights & Biases ML 实验跟踪实例的 Azure Resource Manager SDK。

安装

bash
dotnet add package Azure.ResourceManager.WeightsAndBiases --prerelease
dotnet add package Azure.Identity

当前版本: v1.0.0-beta.1 (preview)
API 版本: 2024-09-18-preview

环境变量

bash
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
AZURE_RESOURCE_GROUP=<your-resource-group>
AZURE_WANDB_INSTANCE_NAME=<your-wandb-instance>

身份验证

csharp
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.WeightsAndBiases;

ArmClient client = new ArmClient(new DefaultAzureCredential());

资源层级

code
Subscription (订阅)
└── ResourceGroup (资源组)
    └── WeightsAndBiasesInstance    # 来自 Azure Marketplace 的 W&B 部署
        ├── Properties (属性)
        │   ├── Marketplace          # 方案详情、计划、发布商
        │   ├── User                 # 管理员用户信息
        │   ├── PartnerProperties    # W&B 特定配置(区域、子域名)
        │   └── SingleSignOnPropertiesV2  # Entra ID SSO 配置
        └── Identity                 # 托管身份(可选)

核心工作流

1. 创建 Weights & Biases 实例

csharp
using Azure.ResourceManager.WeightsAndBiases;
using Azure.ResourceManager.WeightsAndBiases.Models;

ResourceGroupResource resourceGroup = await client
.GetDefaultSubscriptionAsync()
.Result
.GetResourceGroupAsync("my-resource-group");

WeightsAndBiasesInstanceCollection instances = resourceGroup.GetWeightsAndBiasesInstances();

WeightsAndBiasesInstanceData data = new WeightsAndBiasesInstanceData(AzureLocation.EastUS)
{
Properties = new WeightsAndBiasesInstanceProperties
{
// Marketplace 配置
Marketplace = new WeightsAndBiasesMarketplaceDetails
{
SubscriptionId = "<marketplace-subscription-id>",
OfferDetails = new WeightsAndBiasesOfferDetails
{
PublisherId = "wandb",
OfferId = "wandb-pay-as-you-go",
PlanId = "wandb-payg",
PlanName = "Pay As You Go",
TermId = "monthly",
TermUnit = "P1M"
}
},
// 管理员用户
User = new WeightsAndBiasesUserDetails
{
FirstName = "Admin",
LastName = "User",
EmailAddress = "[email protected]",
Upn = "[email protected]"
},
// W&B 特定配置
PartnerProperties = new WeightsAndBiasesPartnerProperties
{
Region = WeightsAndBiasesRegion.EastUS,
Subdomain = "my-company-wandb"
}
},
// 可选:启用托管身份
Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.SystemAssigned)
};

ArmOperation<WeightsAndBiasesInstanceResource> operation = await instances
.CreateOrUpdateAsync(WaitUntil.Completed, "my-wandb-instance", data);

WeightsAndBiasesInstanceResource instance = operation.Value;

Console.WriteLine($"W&B Ins


tance created: {instance.Data.Name}");
Console.WriteLine($"Provisioning state: {instance.Data.Properties.ProvisioningState}");
code
### 2. 获取现有实例
csharp
WeightsAndBiasesInstanceResource instance = await resourceGroup
.GetWeightsAndBiasesInstanceAsync("my-wandb-instance");

Console.WriteLine($"Instance: {instance.Data.Name}");
Console.WriteLine($"Location: {instance.Data.Location}");
Console.WriteLine($"State: {instance.Data.Properties.ProvisioningState}");

if (instance.Data.Properties.PartnerProperties != null)
{
Console.WriteLine($"Region: {instance.Data.Properties.PartnerProperties.Region}");
Console.WriteLine($"Subdomain: {instance.Data.Properties.PartnerProperties.Subdomain}");
}

code
### 3. 列出所有实例
csharp
// 列出资源组中的实例
await foreach (WeightsAndBiasesInstanceResource instance in
resourceGroup.GetWeightsAndBiasesInstances())
{
Console.WriteLine($"Instance: {instance.Data.Name}");
Console.WriteLine($" Location: {instance.Data.Location}");
Console.WriteLine($" State: {instance.Data.Properties.ProvisioningState}");
}

// 列出订阅中的实例
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync();
await foreach (WeightsAndBiasesInstanceResource instance in
subscription.GetWeightsAndBiasesInstancesAsync())
{
Console.WriteLine($"{instance.Data.Name} in {instance.Id.ResourceGroupName}");
}

code
### 4. 配置单点登录 (SSO)
csharp
WeightsAndBiasesInstanceResource instance = await resourceGroup
.GetWeightsAndBiasesInstanceAsync("my-wandb-instance");

// 使用 SSO 配置进行更新
WeightsAndBiasesInstanceData updateData = instance.Data;

updateData.Properties.SingleSignOnPropertiesV2 = new WeightsAndBiasSingleSignOnPropertiesV2
{
Type = WeightsAndBiasSingleSignOnType.Saml,
State = WeightsAndBiasSingleSignOnState.Enable,
EnterpriseAppId = "<entra-app-id>",
AadDomains = { "example.com", "contoso.com" }
};

ArmOperation<WeightsAndBiasesInstanceResource> operation = await resourceGroup
.GetWeightsAndBiasesInstances()
.CreateOrUpdateAsync(WaitUntil.Completed, "my-wandb-instance", updateData);

code
### 5. 更新实例
csharp
WeightsAndBiasesInstanceResource instance = await resourceGroup
.GetWeightsAndBiasesInstanceAsync("my-wandb-instance");

// 更新标签
WeightsAndBiasesInstancePatch patch = new WeightsAndBiasesInstancePatch
{
Tags =
{
{ "environment", "production" },
{ "team", "ml-platform" },
{ "costCenter", "CC-ML-001" }
}
};

instance = await instance.UpdateAsync(patch);
Console.WriteLine($"Updated instance: {instance.Data.Name}");

code
### 6. 删除实例
csharp
WeightsAndBiasesInstanceResource instance = await resourceGroup
.GetWeightsAndBiasesInstanceAsync("my-wandb-instance");

await instance.DeleteAsync(WaitUntil.Completed);
Console.WriteLine("Instance deleted");

code
### 7. 检查资源名称可用性
csharp
// 在创建前检查名称是否可用
// (如果 SDK 未公开此接口,可通过直接调用 ARM 实现)
try
{
await resourceGroup.GetWeightsAndBiasesInstanceAsync("desired-name");
Console.WriteLine("Name is already taken");
}
catch (RequestFailedException ex) when (ex.Status == 404)
{
Console.WriteLine("Name is available");
}
code
## 关键类型参考

| 类型 | 用途 |
|------|---------|
| WeightsAndBiasesInstanceResource | W&B 实例资源 |
| WeightsAndBiasesInstanceData | 实例数据 |
配置数据 |
| WeightsAndBiasesInstanceCollection | 实例集合 |
| WeightsAndBiasesInstanceProperties | 实例属性 |
| WeightsAndBiasesMarketplaceDetails | Marketplace 订阅信息 |
| WeightsAndBiasesOfferDetails | Marketplace 方案详情 |
| WeightsAndBiasesUserDetails | 管理员用户信息 |
| WeightsAndBiasesPartnerProperties | W&B 特定配置 |
| WeightsAndBiasSingleSignOnPropertiesV2 | SSO 配置 |
| WeightsAndBiasesInstancePatch | 用于更新的补丁 |
| WeightsAndBiasesRegion | 支持的区域枚举 |

可用区域

| 区域枚举 | Azure 区域 |
|-------------|--------------|
| WeightsAndBiasesRegion.EastUS | 美国东部 |
| WeightsAndBiasesRegion.CentralUS | 美国中部 |
| WeightsAndBiasesRegion.WestUS | 美国西部 |
| WeightsAndBiasesRegion.WestEurope | 西欧 |
| WeightsAndBiasesRegion.JapanEast | 日本东部 |
| WeightsAndBiasesRegion.KoreaCentral | 韩国中部 |

Marketplace 方案详情

针对 Azure Marketplace 集成:

| 属性 | 值 |
|----------|-------|
| 发布商 ID | wandb |
| 方案 ID | wandb-pay-as-you-go |
| 计划 ID | wandb-payg (按需付费) |

最佳实践

1. 使用 DefaultAzureCredential — 自动支持多种身份验证方法
2. 启用托管标识 (Managed Identity) — 以安全方式访问其他 Azure 资源
3. 配置 SSO — 启用 Entra ID SSO 以增强企业安全性
4. 标记资源 — 使用标签进行成本跟踪和组织管理
5. 检查配置状态 — 在使用实例前等待状态变为 Succeeded
6. 选择合适的区域 — 选择离计算资源最近的区域
7. 使用 Azure 监控 — 使用 Azure Monitor 监控资源健康状况

错误处理

csharp using Azure;

try
{
ArmOperation<WeightsAndBiasesInstanceResource> operation = await instances
.CreateOrUpdateAsync(WaitUntil.Completed, "my-wandb", data);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("实例已存在或名称冲突");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
Console.WriteLine($"配置无效: {ex.Message}");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"Azure 错误: {ex.Status} - {ex.Message}");
}

code
## 与 W&B SDK 集成

创建 Azure 资源后,可使用 W&B Python SDK 进行实验跟踪:

python

安装: pip install wandb


import wandb

使用来自 Azure 部署实例的 W&B API 密钥登录

wandb.login(host="https://my-company-wandb.wandb.ai")

初始化运行

run = wandb.init(project="my-ml-project")

记录指标

wandb.log({"accuracy": 0.95, "loss": 0.05})

结束运行

run.finish() ``

相关 SDK

| SDK | 用途 | 安装 |
|-----|---------|---------|
|
Azure.ResourceManager.WeightsAndBiases | W&B 实例管理 (本 SDK) | dotnet add package Azure.ResourceManager.WeightsAndBiases --prerelease |
|
Azure.ResourceManager.MachineLearning | Azure ML 工作区 | dotnet add package Azure.ResourceManager.MachineLearning` |

参考链接

| 资源 | URL |
|----------|-----|
| NuGet 包 | https://www.nuget.org/packages/Azure.ResourceManager.WeightsAndBiases |
| W&B 文档 | https://docs.wandb.ai/ |
| Azure Marketplace | https://azuremarketplace.microsoft.com/marketplace/apps/wandb.wandb-pay-as-you-go |
| GitHub 源码 | https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/weightsandbiases |

使用场景

此技能 可用于执行概览中所描述的工作流或操作。

局限性

  • 仅在任务明确符合上述范围时使用此技能。
  • 不要将输出结果视为针对特定环境的验证、测试或专家评审的替代方案。
  • 如果缺少必要的输入、权限、安全边界或成功标准,请停止操作并请求澄清。