azure-mgmt-weightsandbiases-dotnet

npx skills add https://github.com/microsoft/skills --skill azure-mgmt-weightsandbiases-dotnet

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

  1. Utiliser DefaultAzureCredential — Supporte plusieurs méthodes d'authentification automatiquement
  2. Activer l'identité gérée — Pour un accès sécurisé aux autres ressources Azure
  3. Configurer SSO — Activer SSO Entra ID pour la sécurité entreprise
  4. Étiqueter les ressources — Utiliser les étiquettes pour le suivi des coûts et l'organisation
  5. Vérifier l'état du provisionnement — Attendre Succeeded avant d'utiliser l'instance
  6. Choisir la région appropriée — Sélectionner la région la plus proche de votre calcul
  7. 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

Ressource URL
Package NuGet https://www.nuget.org/packages/Azure.ResourceManager.WeightsAndBiases
Documentation W&B https://docs.wandb.ai/
Azure Marketplace https://azuremarketplace.microsoft.com/marketplace/apps/wandb.wandb-pay-as-you-go
Source GitHub https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/weightsandbiases

Skills similaires