Azure.ResourceManager.WeightsAndBiases (.NET)
Azure Resource Manager SDK for deploying and managing Weights & Biases ML experiment tracking instances via Azure Marketplace.
Installation
dotnet add package Azure.ResourceManager.WeightsAndBiases --prerelease dotnet add package Azure.Identity
Current Version: v1.0.0-beta.1 (preview)
API Version: 2024-09-18-preview
Environment Variables
AZURE_SUBSCRIPTION_ID=<your-subscription-id> AZURE_RESOURCE_GROUP=<your-resource-group> AZURE_WANDB_INSTANCE_NAME=<your-wandb-instance>
Authentication
using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.WeightsAndBiases;
ArmClient client = new ArmClient(new DefaultAzureCredential());
Resource Hierarchy
Subscription └── ResourceGroup └── WeightsAndBiasesInstance # W&B deployment from Azure Marketplace ├── Properties │ ├── Marketplace # Offer details, plan, publisher │ ├── User # Admin user info │ ├── PartnerProperties # W&B-specific config (region, subdomain) │ └── SingleSignOnPropertiesV2 # Entra ID SSO configuration └── Identity # Managed identity (optional)
Core Workflows
- Create Weights & Biases Instance
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 configuration 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" } }, // Admin user User = new WeightsAndBiasesUserDetails { FirstName = "Admin", LastName = "User", EmailAddress = "admin@example.com", Upn = "admin@example.com" }, // W&B-specific configuration PartnerProperties = new WeightsAndBiasesPartnerProperties { Region = WeightsAndBiasesRegion.EastUS, Subdomain = "my-company-wandb" } }, // Optional: Enable managed identity 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 Instance created: {instance.Data.Name}"); Console.WriteLine($"Provisioning state: {instance.Data.Properties.ProvisioningState}");
- Get Existing Instance
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}"); }
- List All Instances
// List in resource group 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}"); }
// List in subscription SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync(); await foreach (WeightsAndBiasesInstanceResource instance in subscription.GetWeightsAndBiasesInstancesAsync()) { Console.WriteLine($"{instance.Data.Name} in {instance.Id.ResourceGroupName}"); }
- Configure Single Sign-On (SSO)
WeightsAndBiasesInstanceResource instance = await resourceGroup .GetWeightsAndBiasesInstanceAsync("my-wandb-instance");
// Update with SSO configuration 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);
- Update Instance
WeightsAndBiasesInstanceResource instance = await resourceGroup .GetWeightsAndBiasesInstanceAsync("my-wandb-instance");
// Update tags 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}");
- Delete Instance
WeightsAndBiasesInstanceResource instance = await resourceGroup .GetWeightsAndBiasesInstanceAsync("my-wandb-instance");
await instance.DeleteAsync(WaitUntil.Completed); Console.WriteLine("Instance deleted");
- Check Resource Name Availability
// Check if name is available before creating // (Implement via direct ARM call if SDK doesn't expose this) try { await resourceGroup.GetWeightsAndBiasesInstanceAsync("desired-name"); Console.WriteLine("Name is already taken"); } catch (RequestFailedException ex) when (ex.Status == 404) { Console.WriteLine("Name is available"); }
Key Types Reference
Type Purpose
WeightsAndBiasesInstanceResource
W&B instance resource
WeightsAndBiasesInstanceData
Instance configuration data
WeightsAndBiasesInstanceCollection
Collection of instances
WeightsAndBiasesInstanceProperties
Instance properties
WeightsAndBiasesMarketplaceDetails
Marketplace subscription info
WeightsAndBiasesOfferDetails
Marketplace offer details
WeightsAndBiasesUserDetails
Admin user information
WeightsAndBiasesPartnerProperties
W&B-specific configuration
WeightsAndBiasSingleSignOnPropertiesV2
SSO configuration
WeightsAndBiasesInstancePatch
Patch for updates
WeightsAndBiasesRegion
Supported regions enum
Available Regions
Region Enum Azure Region
WeightsAndBiasesRegion.EastUS
East US
WeightsAndBiasesRegion.CentralUS
Central US
WeightsAndBiasesRegion.WestUS
West US
WeightsAndBiasesRegion.WestEurope
West Europe
WeightsAndBiasesRegion.JapanEast
Japan East
WeightsAndBiasesRegion.KoreaCentral
Korea Central
Marketplace Offer Details
For Azure Marketplace integration:
Property Value
Publisher ID wandb
Offer ID wandb-pay-as-you-go
Plan ID wandb-payg (Pay As You Go)
Best Practices
-
Use DefaultAzureCredential — Supports multiple auth methods automatically
-
Enable managed identity — For secure access to other Azure resources
-
Configure SSO — Enable Entra ID SSO for enterprise security
-
Tag resources — Use tags for cost tracking and organization
-
Check provisioning state — Wait for Succeeded before using instance
-
Use appropriate region — Choose region closest to your compute
-
Monitor with Azure — Use Azure Monitor for resource health
Error Handling
using Azure;
try { ArmOperation<WeightsAndBiasesInstanceResource> operation = await instances .CreateOrUpdateAsync(WaitUntil.Completed, "my-wandb", data); } catch (RequestFailedException ex) when (ex.Status == 409) { Console.WriteLine("Instance already exists or name conflict"); } catch (RequestFailedException ex) when (ex.Status == 400) { Console.WriteLine($"Invalid configuration: {ex.Message}"); } catch (RequestFailedException ex) { Console.WriteLine($"Azure error: {ex.Status} - {ex.Message}"); }
Integration with W&B SDK
After creating the Azure resource, use the W&B Python SDK for experiment tracking:
Install: pip install wandb
import wandb
Login with your W&B API key from the Azure-deployed instance
wandb.login(host="https://my-company-wandb.wandb.ai")
Initialize a run
run = wandb.init(project="my-ml-project")
Log metrics
wandb.log({"accuracy": 0.95, "loss": 0.05})
Finish run
run.finish()
Related SDKs
SDK Purpose Install
Azure.ResourceManager.WeightsAndBiases
W&B instance management (this SDK) dotnet add package Azure.ResourceManager.WeightsAndBiases --prerelease
Azure.ResourceManager.MachineLearning
Azure ML workspaces dotnet add package Azure.ResourceManager.MachineLearning
Reference Links
Resource URL
NuGet Package https://www.nuget.org/packages/Azure.ResourceManager.WeightsAndBiases
W&B Documentation https://docs.wandb.ai/
Azure Marketplace https://azuremarketplace.microsoft.com/marketplace/apps/wandb.wandb-pay-as-you-go
GitHub Source https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/weightsandbiases