Azure.ResourceManager.WeightsAndBiases (.NET)
Kit SDK Azure Resource Manager pour déployer et gérer les instances Weights & Biases de suivi des expériences ML via Azure Marketplace.
Installation
dotnet add package Azure.ResourceManager.WeightsAndBiases --prerelease
dotnet add package Azure.Identity
Version actuelle : v1.0.0-beta.1 (préversion)
Version API : 2024-09-18-preview
Variables d'environnement
AZURE_SUBSCRIPTION_ID=<your-subscription-id>
AZURE_RESOURCE_GROUP=<your-resource-group>
AZURE_WANDB_INSTANCE_NAME=<your-wandb-instance>
Authentification
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.WeightsAndBiases;
ArmClient client = new ArmClient(new DefaultAzureCredential());
Hiérarchie des ressources
Subscription
└── ResourceGroup
└── WeightsAndBiasesInstance # Déploiement W&B depuis Azure Marketplace
├── Properties
│ ├── Marketplace # Détails de l'offre, plan, éditeur
│ ├── User # Informations administrateur
│ ├── PartnerProperties # Configuration spécifique W&B (région, sous-domaine)
│ └── SingleSignOnPropertiesV2 # Configuration SSO Entra ID
└── Identity # Identité gérée (optionnel)
Flux de travail principaux
1. Créer une instance Weights & Biases
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
{
// Configuration 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"
}
},
// Utilisateur administrateur
User = new WeightsAndBiasesUserDetails
{
FirstName = "Admin",
LastName = "User",
EmailAddress = "admin@example.com",
Upn = "admin@example.com"
},
// Configuration spécifique W&B
PartnerProperties = new WeightsAndBiasesPartnerProperties
{
Region = WeightsAndBiasesRegion.EastUS,
Subdomain = "my-company-wandb"
}
},
// Optionnel : activer l'identité gérée
Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.SystemAssigned)
};
ArmOperation<WeightsAndBiasesInstanceResource> operation = await instances
.CreateOrUpdateAsync(WaitUntil.Completed, "my-wandb-instance", data);
WeightsAndBiasesInstanceResource instance = operation.Value;
Console.WriteLine($"Instance W&B créée : {instance.Data.Name}");
Console.WriteLine($"État du provisionnement : {instance.Data.Properties.ProvisioningState}");
2. Obtenir une instance existante
WeightsAndBiasesInstanceResource instance = await resourceGroup
.GetWeightsAndBiasesInstanceAsync("my-wandb-instance");
Console.WriteLine($"Instance : {instance.Data.Name}");
Console.WriteLine($"Localisation : {instance.Data.Location}");
Console.WriteLine($"État : {instance.Data.Properties.ProvisioningState}");
if (instance.Data.Properties.PartnerProperties != null)
{
Console.WriteLine($"Région : {instance.Data.Properties.PartnerProperties.Region}");
Console.WriteLine($"Sous-domaine : {instance.Data.Properties.PartnerProperties.Subdomain}");
}
3. Lister toutes les instances
// Lister dans le groupe de ressources
await foreach (WeightsAndBiasesInstanceResource instance in
resourceGroup.GetWeightsAndBiasesInstances())
{
Console.WriteLine($"Instance : {instance.Data.Name}");
Console.WriteLine($" Localisation : {instance.Data.Location}");
Console.WriteLine($" État : {instance.Data.Properties.ProvisioningState}");
}
// Lister dans l'abonnement
SubscriptionResource subscription = await client.GetDefaultSubscriptionAsync();
await foreach (WeightsAndBiasesInstanceResource instance in
subscription.GetWeightsAndBiasesInstancesAsync())
{
Console.WriteLine($"{instance.Data.Name} dans {instance.Id.ResourceGroupName}");
}
4. Configurer l'authentification unique (SSO)
WeightsAndBiasesInstanceResource instance = await resourceGroup
.GetWeightsAndBiasesInstanceAsync("my-wandb-instance");
// Mettre à jour avec la configuration 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);
5. Mettre à jour une instance
WeightsAndBiasesInstanceResource instance = await resourceGroup
.GetWeightsAndBiasesInstanceAsync("my-wandb-instance");
// Mettre à jour les étiquettes
WeightsAndBiasesInstancePatch patch = new WeightsAndBiasesInstancePatch
{
Tags =
{
{ "environment", "production" },
{ "team", "ml-platform" },
{ "costCenter", "CC-ML-001" }
}
};
instance = await instance.UpdateAsync(patch);
Console.WriteLine($"Instance mise à jour : {instance.Data.Name}");
6. Supprimer une instance
WeightsAndBiasesInstanceResource instance = await resourceGroup
.GetWeightsAndBiasesInstanceAsync("my-wandb-instance");
await instance.DeleteAsync(WaitUntil.Completed);
Console.WriteLine("Instance supprimée");
7. Vérifier la disponibilité du nom de ressource
// Vérifier si le nom est disponible avant la création
// (Implémenter via appel ARM direct si le SDK ne l'expose pas)
try
{
await resourceGroup.GetWeightsAndBiasesInstanceAsync("desired-name");
Console.WriteLine("Le nom est déjà utilisé");
}
catch (RequestFailedException ex) when (ex.Status == 404)
{
Console.WriteLine("Le nom est disponible");
}
Référence des types clés
| Type |
Objectif |
WeightsAndBiasesInstanceResource |
Ressource instance W&B |
WeightsAndBiasesInstanceData |
Données de configuration d'instance |
WeightsAndBiasesInstanceCollection |
Collection d'instances |
WeightsAndBiasesInstanceProperties |
Propriétés d'instance |
WeightsAndBiasesMarketplaceDetails |
Informations d'abonnement Marketplace |
WeightsAndBiasesOfferDetails |
Détails de l'offre Marketplace |
WeightsAndBiasesUserDetails |
Informations utilisateur administrateur |
WeightsAndBiasesPartnerProperties |
Configuration spécifique W&B |
WeightsAndBiasSingleSignOnPropertiesV2 |
Configuration SSO |
WeightsAndBiasesInstancePatch |
Correctif pour mises à jour |
WeightsAndBiasesRegion |
Énumération des régions supportées |
Régions disponibles
| Énumération de région |
Région Azure |
WeightsAndBiasesRegion.EastUS |
Est US |
WeightsAndBiasesRegion.CentralUS |
US Central |
WeightsAndBiasesRegion.WestUS |
Ouest US |
WeightsAndBiasesRegion.WestEurope |
Europe Ouest |
WeightsAndBiasesRegion.JapanEast |
Japon Est |
WeightsAndBiasesRegion.KoreaCentral |
Corée du Centre |
Détails de l'offre Marketplace
Pour l'intégration Azure Marketplace :
| Propriété |
Valeur |
| ID d'éditeur |
wandb |
| ID d'offre |
wandb-pay-as-you-go |
| ID de plan |
wandb-payg (Paiement à l'utilisation) |
Bonnes pratiques
- Utiliser DefaultAzureCredential — Supporte plusieurs méthodes d'authentification automatiquement
- Activer l'identité gérée — Pour un accès sécurisé aux autres ressources Azure
- Configurer SSO — Activer SSO Entra ID pour la sécurité entreprise
- Étiqueter les ressources — Utiliser les étiquettes pour le suivi des coûts et l'organisation
- Vérifier l'état du provisionnement — Attendre
Succeeded avant d'utiliser l'instance
- Choisir la région appropriée — Sélectionner la région la plus proche de votre calcul
- Surveiller avec Azure — Utiliser Azure Monitor pour la santé des ressources
Gestion des erreurs
using Azure;
try
{
ArmOperation<WeightsAndBiasesInstanceResource> operation = await instances
.CreateOrUpdateAsync(WaitUntil.Completed, "my-wandb", data);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
Console.WriteLine("L'instance existe déjà ou conflit de nom");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
Console.WriteLine($"Configuration invalide : {ex.Message}");
}
catch (RequestFailedException ex)
{
Console.WriteLine($"Erreur Azure : {ex.Status} - {ex.Message}");
}
Intégration avec SDK W&B
Après avoir créé la ressource Azure, utiliser le SDK Python W&B pour le suivi des expériences :
# Installation : pip install wandb
import wandb
# Connexion avec votre clé API W&B depuis l'instance déployée sur Azure
wandb.login(host="https://my-company-wandb.wandb.ai")
# Initialiser une exécution
run = wandb.init(project="my-ml-project")
# Enregistrer les métriques
wandb.log({"accuracy": 0.95, "loss": 0.05})
# Terminer l'exécution
run.finish()
SDKs associés
| SDK |
Objectif |
Installation |
Azure.ResourceManager.WeightsAndBiases |
Gestion d'instances W&B (ce SDK) |
dotnet add package Azure.ResourceManager.WeightsAndBiases --prerelease |
Azure.ResourceManager.MachineLearning |
Espaces de travail Azure ML |
dotnet add package Azure.ResourceManager.MachineLearning |
Liens de référence