Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Diese Seite enthält Referenzdokumentation für das JSON-Schema, das von der Windows ML-Modellkatalogquelle zum Definieren von Modellkatalogquellen verwendet wird. Modellkatalogquellen sind JSON-Dateien, die verfügbare KI-Modelle, deren Kompatibilität und Downloadinformationen beschreiben.
Ihre Modellkatalogquelldatei kann online unter https:// URLs gehostet oder als lokale Datei aus Ihrer App referenziert werden.
Schemaübersicht
Ein Modellkatalog ist eine JSON-Datei, die ein Array von Modelldefinitionen und optionalen Metadaten enthält. Das Schema folgt standardmäßigen JSON-Schemakonventionen und ist so konzipiert, dass es sowohl lesbar als auch maschinenparsierbar ist.
Der Katalog unterstützt zwei Typen von Modellverteilungen:
- Dateibasierte Modelle: Modelle, die als einzelne Dateien verteilt werden (ONNX-Modelle, Konfigurationen usw.)
- Paketbasierte Modelle: Modelle, die als Windows-Pakete (MSIX) verteilt werden
Stammkatalogstruktur
{
"models": [
// Array of model objects
]
}
Stammeigenschaften
| Eigentum | Typ | Erforderlich | Description |
|---|---|---|---|
models |
Array | Yes | Array von Modelldefinitionen |
Modellobjektstruktur
Jedes Modell im models Array folgt dieser Struktur:
{
"id": "phi-3.5-cpu",
"name": "phi-3.5",
"version": "1.0.0",
"publisher": "Publisher Name",
"executionProviders": [
{
"name": "CPUExecutionProvider"
}
],
"modelSizeBytes": 13632917530,
"license": "MIT",
"licenseUri": "https://opensource.org/licenses/MIT",
"licenseText": "License text content",
"uri": "https://models.example.com/model-base",
"files": [
{
"name": "model.onnx",
"uri": "https://models.example.com/model.onnx",
"sha256": "d7f93e79ba1284a3ff2b4cea317d79f3e98e64acfce725ad5f4e8197864aef73"
}
]
}
Modelleigenschaften
| Eigentum | Typ | Erforderlich | Description |
|---|---|---|---|
id |
Schnur | Yes | Eindeutiger Katalogbezeichner für dieses spezifische Modell |
name |
Schnur | Yes | Allgemeiner Name des Modells (kann über Varianten hinweg freigegeben werden) |
version |
Schnur | Yes | Modellversionsnummer |
publisher |
Schnur | Yes | Herausgeber oder Organisation, der das Modell erstellt hat |
executionProviders |
Array | Yes | Array von Vom Modell unterstützten Ausführungsanbieterobjekten |
modelSizeBytes |
Integer | Nein | Größe des Modells in Byte (Minimum: 0) |
license |
Schnur | Yes | Lizenztyp (z. B. "MIT", "BSD", "Apache") |
licenseUri |
Schnur | Nein | URI für das Lizenzdokument |
licenseText |
Schnur | Nein | Textinhalt der Lizenz |
uri |
Schnur | Nein | Basis-URI, auf den das Modell zugegriffen werden kann |
files |
Array | Bedingt | Array von Dateien, die dem Modell zugeordnet sind |
packages |
Array | Bedingt | Array von Paketen, die für das Modell erforderlich sind |
Hinweis: Ein Modell muss entweder
filesODERpackageshaben, aber nicht beide.
Ausführungsanbieter
Das executionProviders Feld ist ein Array von Ausführungsanbieterobjekten. Jedes Ausführungsanbieterobjekt muss mindestens eine name Eigenschaft aufweisen:
"executionProviders": [
{
"name": "CPUExecutionProvider"
},
{
"name": "DmlExecutionProvider"
}
]
Eine umfassende Liste aller verfügbaren Ausführungsanbieter finden Sie auf der Seite "Unterstützte Ausführungsanbieter" auf der Windows ML-Dokumentationsseite .
File-Objekt
Dateien werden verwendet, um einzelne Modellkomponenten zu verteilen (ONNX-Dateien, Konfigurationen usw.):
{
"name": "model.onnx",
"uri": "https://models.example.com/model.onnx",
"sha256": "d7f93e79ba1284a3ff2b4cea317d79f3e98e64acfce725ad5f4e8197864aef73"
}
| Eigentum | Typ | Erforderlich | Description |
|---|---|---|---|
name |
Schnur | Yes | Name der Datei |
uri |
Schnur | Nein | URI, in den die Datei heruntergeladen werden kann |
sha256 |
Schnur | Yes | SHA256-Hash (64-stellige Hex-Zeichenfolge) zur Integritätsüberprüfung und Deduplizierung identischer Modelle |
Hinweis: Wenn
urinicht angegeben, wird der Datei-URI aus der Basiseigenschafturides Modells erstellt.
Package-Objekt
Pakete werden verwendet, um Modelle als Windows-Pakete oder -Anwendungen zu verteilen:
{
"packageFamilyName": "Microsoft.Example_8wekyb3d8bbwe",
"uri": "https://example.com/packages/model.msix",
"sha256": "a1b2c3d4e5f6789..."
}
| Eigentum | Typ | Erforderlich | Description |
|---|---|---|---|
packageFamilyName |
Schnur | Yes | Windows-Paketfamilienname-ID |
uri |
Schnur | Yes | URI, in dem das Paket abgerufen werden kann (HTTPS oder lokaler Dateipfad) |
sha256 |
Schnur | Bedingt | SHA256-Hash für integritätsüberprüfung (erforderlich für HTTPS-URIs) |
Verteilungsmethoden
Der Katalog unterstützt mehrere Verteilungsmethoden:
Dateibasierte Verteilung:
- Direkte HTTPS-Downloads
- Auf GitHub, Azure oder anderen Webservern gehostete Dateien
- Modelldateien (
.onnx), Konfigurationsdateien (.json) und unterstützende Ressourcen
Paketbasierte Verteilung:
- Direkte Paketdownloads über HTTPS
- Lokale Dateipfade für Pakete
- MSIX-Pakete
Vollständige Beispiele
Beispiel für ein dateibasiertes Modell
Hier ist ein Beispielkatalog mit dateibasierten Modellen:
{
"models": [
{
"id": "squeezenet-v1",
"name": "squeezenet",
"version": "1.0",
"publisher": "WindowsAppSDK",
"executionProviders": [
{
"name": "CPUExecutionProvider"
}
],
"modelSizeBytes": 13632917530,
"license": "BSD",
"licenseUri": "https://github.com/microsoft/WindowsAppSDK-Samples/raw/main/LICENSE",
"licenseText": "BSD 3-Clause License",
"uri": "https://github.com/microsoft/WindowsAppSDK-Samples/raw/main/models",
"files": [
{
"name": "SqueezeNet.onnx",
"uri": "https://github.com/microsoft/WindowsAppSDK-Samples/raw/main/models/SqueezeNet.onnx",
"sha256": "d7f93e79ba1284a3ff2b4cea317d79f3e98e64acfce725ad5f4e8197864aef73"
},
{
"name": "Labels.txt",
"uri": "https://github.com/microsoft/WindowsAppSDK-Samples/raw/main/models/Labels.txt",
"sha256": "dc1fd0d4747096d3aa690bd65ec2f51fdb3e5117535bfbce46fa91088a8f93a9"
}
]
}
]
}
Beispiel für paketbasiertes Modell
Hier ist ein Beispielkatalog mit paketbasierten Modellen:
{
"models": [
{
"id": "example-packaged-model-cpu",
"name": "example-packaged-model",
"version": "2.0.0",
"publisher": "Microsoft",
"executionProviders": [
{
"name": "CPUExecutionProvider"
},
{
"name": "DmlExecutionProvider"
}
],
"license": "MIT",
"licenseUri": "https://opensource.org/licenses/MIT",
"licenseText": "MIT License - see URI for full text",
"packages": [
{
"packageFamilyName": "Microsoft.ExampleAI_8wekyb3d8bbwe",
"uri": "https://example.com/packages/ExampleAI.msix",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
]
}
]
}
Schemavalidierung
Der Windows ML-Modellkatalog folgt der JSON-Schemaspezifikation (Entwurf 2020-12). Sie können Ihre Katalogdateien anhand des offiziellen Schemas überprüfen, um die Kompatibilität sicherzustellen.
Wichtige Gültigkeitsprüfungsregeln
-
Erforderliche Felder: Jedes Modell muss
idüber ,name,version,publisher, undexecutionProviderslicense -
Exklusive Verteilung: Modelle müssen entweder
filesODERpackagesangeben, aber nicht beide - SHA256-Format: Alle SHA256-Hashes müssen genau 64 Hexadezimalzeichen sein.
-
Ausführungsanbieter: Muss Objekte mit mindestens einer
nameEigenschaft sein - URI-Format: Alle URIs müssen gemäß RFC 3986 ordnungsgemäß formatiert sein.
- HTTPS-Paketintegrität: Paketdownloads über HTTPS müssen SHA256-Hashes für die Integritätsprüfung enthalten.
Häufige Überprüfungsfehler
- Fehlende Pflichtfelder: Stellen Sie sicher, dass alle erforderlichen Eigenschaften vorhanden sind.
- Ungültiges SHA256: Überprüfen Sie, ob Hashwerte genau 64 Hexzeichen sind.
-
Gemischte Verteilung: Geben Sie nicht sowohl als auch
filespackagesfür dasselbe Modell an - Ungültige URIs: Überprüfen, ob alle URIs ordnungsgemäß formatiert und barrierefrei sind
- Fehlende SHA256 für HTTPS-Pakete: HTTPS-Paketdownloads erfordern integritätsüberprüfung
Erstellen ihres Katalogs
Schritt 1: Auswählen der Verteilungsmethode
Verwenden Sie die dateibasierte Verteilung in folgenden Fällen:
- Ihre Modelle sind standardmäßige ONNX-Dateien mit unterstützenden Ressourcen
- Sie haben Webhosting für Modelldateien
- Sie möchten einfache HTTPS-Downloads
- Modelle sind relativ klein (< 1 GB pro Datei)
Paketbasierte Verteilung verwenden, wenn:
- Für Ihre Modelle ist eine Systemintegration erforderlich.
- Modelle umfassen Ausführungsanbieter oder Abhängigkeiten
- Sie benötigen Windows-Paketverwaltungsfeatures
- Sie möchten über MSIX-Pakete verteilen
Schritt 2: Strukturieren Ihrer Modelle
{
"models": [
{
"id": "unique-identifier-cpu",
"name": "unique-identifier",
"version": "1.0.0",
"publisher": "YourOrganization",
"executionProviders": [
{
"name": "CPUExecutionProvider"
}
],
"license": "MIT",
"files": [] // or "packages": []
}
]
}
Schritt 3: Hinzufügen von Verteilungsdetails
Für dateibasierte Modelle:
"uri": "https://yourserver.com/models/base-path",
"files": [
{
"name": "model.onnx",
"sha256": "your-calculated-sha256-hash"
}
]
Für paketbasierte Modelle:
"packages": [
{
"packageFamilyName": "YourPublisher.YourApp_randomstring",
"uri": "https://yourserver.com/packages/YourApp.msix",
"sha256": "your-calculated-sha256-hash"
}
]
Schritt 4: Testen Des Katalogs
- Überprüfen der JSON-Syntax mithilfe eines JSON-Validators
- Überprüfen, ob auf alle URIs zugegriffen werden kann und korrekte Inhalte zurückgegeben werden
- Überprüfen von SHA256-Hashes mit dem tatsächlichen Dateiinhalt
- Testen des Modelldownloads mithilfe der Windows ML-Modellkatalog-APIs
Bewährte Methoden
-
Verwenden der semantischen Versionsverwaltung: Folgen der semantischen Versionsverwaltung (z. B. "1.2.3") für das
versionFeld - Bereitstellen präziser SHA256-Hashes: Geben Sie immer korrekte SHA256-Hashes zur Integritätsüberprüfung an.
- Einheitliche Benennung: Verwenden konsistenter Benennungskonventionen für IDs und Namen in modellübergreifenden Versionen
- Klare Beschreibungen: Schreiben Sie hilfreiche Beschreibungen, die Modellfunktionen und Anwendungsfälle erläutern
- Ordnungsgemäße Lizenzierung: Schließen Sie immer vollständige Lizenzinformationen (Typ, URI und Text) ein.
- Testen der Barrierefreiheit: Stellen Sie sicher, dass auf alle URIs zugegriffen werden kann, und geben Sie den erwarteten Inhalt zurück.
- Kompatibilität des Ausführungsanbieters: Sicherstellen, dass Ausführungsanbieter den Zielhardwarefunktionen entsprechen
- Logische Gruppierung: Verwenden des Namensfelds zum Gruppieren verwandter Modellvarianten (unterschiedliche EP-Versionen des gleichen Basismodells)
- Dateiorganisation: Zusammenhalten verwandter Dateien und Verwenden aussagekräftiger Dateinamen
- Sicherheit: Https für alle Dateidownloads verwenden und SHA256-Überprüfung einschließen
Überlegungen zum Hosting
Beim Hosten eines Modellkatalogs:
- HTTPS erforderlich: Immer Kataloge und Modelle über HTTPS bereitstellen
- CORS-Header: Konfigurieren der entsprechenden CORS-Header für den ursprungsübergreifenden Zugriff
-
Content-Type: Serve catalog JSON with
application/jsoncontent type - Cacheheader: Festlegen geeigneter Cacheheader für die Leistung
- Authentifizierung: Unterstützung der standardmäßigen HTTP-Authentifizierung bei Bedarf
JSON-Schema
Im Folgenden sehen Sie das JSON-Schema, das für die Überprüfung Ihrer JSON-Nutzlast verwendet werden kann.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "WinML Model Catalog Schema",
"description": "JSON schema for WindowsML Model catalog configuration",
"type": "object",
"required": [ "models" ],
"properties": {
"models": {
"type": "array",
"description": "Array of machine learning models in the catalog",
"items": {
"$ref": "#/$defs/Model"
}
}
},
"$defs": {
"Model": {
"type": "object",
"required": [ "id", "name", "version", "publisher", "executionProviders", "license" ],
"properties": {
"id": {
"type": "string",
"description": "Unique-in-the-catalog identifier for the model"
},
"name": {
"type": "string",
"description": "Common name of the model"
},
"version": {
"type": "string",
"description": "Version of the model"
},
"publisher": {
"type": "string",
"description": "Publisher or organization that created the model"
},
"executionProviders": {
"type": "array",
"description": "Array of execution providers supported by the model",
"items": {
"$ref": "#/$defs/ExecutionProvider"
}
},
"modelSizeBytes": {
"type": "integer",
"minimum": 0,
"description": "Size of the model in bytes"
},
"license": {
"type": "string",
"description": "License type (e.g., MIT, BSD, Apache)"
},
"licenseUri": {
"type": "string",
"format": "uri",
"description": "URI to the license document"
},
"licenseText": {
"type": "string",
"description": "Text content of the license"
},
"uri": {
"type": "string",
"format": "uri",
"description": "URI where the model can be accessed"
},
"files": {
"type": "array",
"description": "Array of files associated with the model",
"items": {
"$ref": "#/$defs/File"
}
},
"packages": {
"type": "array",
"description": "Array of packages required for the model",
"items": {
"$ref": "#/$defs/Package"
}
}
},
"oneOf": [
{
"required": [ "files" ],
"not": { "required": [ "packages" ] }
},
{
"required": [ "packages" ],
"not": { "required": [ "files" ] }
}
]
},
"File": {
"type": "object",
"required": [ "name", "sha256" ],
"properties": {
"name": {
"type": "string",
"description": "Name of the file"
},
"uri": {
"type": "string",
"format": "uri",
"description": "URI where the file can be downloaded"
},
"sha256": {
"type": "string",
"pattern": "^[a-fA-F0-9]{64}$",
"description": "SHA256 hash of the file for integrity verification"
}
}
},
"Package": {
"type": "object",
"required": [ "packageFamilyName", "uri" ],
"properties": {
"packageFamilyName": {
"type": "string",
"description": "Windows package family name identifier"
},
"uri": {
"type": "string",
"format": "uri",
"description": "URI where the package can be obtained (HTTPS or local file path)"
},
"sha256": {
"type": "string",
"pattern": "^[a-fA-F0-9]{64}$",
"description": "SHA256 hash of the package for integrity verification"
}
},
"if": {
"properties": {
"uri": {
"pattern": "^https://"
}
}
},
"then": {
"required": [ "packageFamilyName", "uri", "sha256" ]
}
},
"ExecutionProvider": {
"type": "object",
"required": [ "name" ],
"properties": {
"name": {
"type": "string",
"description": "Name of the execution provider (e.g., CPUExecutionProvider)"
}
}
}
}
}
Nächste Schritte
- Informationen zum Modellkatalog (Übersicht)
- Folgen Sie dem Leitfaden "Erste Schritte".
- Windows ML-Dokumentation erkunden