Modellmetadaten vorbereiten

Modellmetadaten sind zwar optional, werden jedoch empfohlen.

Metadaten zur Modellherkunft

Sie können die Modellherkunft dokumentieren. Das ist optional. In der folgenden Tabelle sind die unterstützten Metadaten zur Modellherkunft aufgeführt:

Metadaten Beschreibung
git_branch Verzweigung des Git-Repositorys.
git_commit Commit-ID.
repository_url URL des Remote-Git-Repositorys.
script_dir Lokaler Pfad zum Artefaktverzeichnis.
training_id

OCID der Ressource, die zum Trainieren des Modells, der Notizbuchsession oder des Joblaufs verwendet wird.

Sie können die folgenden Umgebungsvariablen verwenden, wenn Sie ein Modell mit dem OCI-SDK speichern:

  • NB_SESSION_OCID

Beispiel

provenance_details = CreateModelProvenanceDetails(repository_url="EXAMPLE-repositoryUrl-Value",
                                                  git_branch="EXAMPLE-gitBranch-Value",
                                                  git_commit="EXAMPLE-gitCommit-Value",
                                                  script_dir="EXAMPLE-scriptDir-Value",
                                                  # OCID of the ML job Run or Notebook session on which this model was
                                                  # trained
                                                  training_id="<<Notebooksession or ML Job Run OCID>>"
                                                  )

Metadaten zur Modelltaxonomie

Sie können die Modelltaxonomie dokumentieren. Das ist optional.

Mit den Metadatenfeldern für die Modelltaxonomie können Sie den Anwendungsfall und das Framework für maschinelles Lernen hinter dem Modell beschreiben. Die definierten Metadatentags sind die zulässigen Werte für den Anwendungsfalltyp und das Framework für definierte Metadaten und Kategoriewerte für benutzerdefinierte Metadaten.

Voreingestellte Modelltaxonomie

In der folgenden Tabelle sind die unterstützten Metadaten zur Modelltaxonomie aufgeführt:

Metadaten Beschreibung
UseCaseType

Beschreibt den Anwendungsfall für maschinelles Lernen, der mit dem Modell verknüpft ist, mit einem der aufgeführten Werte:

binary_classification
regression
multinomial_classification
clustering
recommender
dimensionality_reduction/representation
time_series_forecasting
anomaly_detection
topic_modeling
ner
sentiment_analysis
image_classification
object_localization
other
Framework

Das Framework für maschinelles Lernen, das mit dem Modell verknüpft ist, mit einem der aufgeführten Werte:

scikit-learn
xgboost 
tensorflow 
pytorch 
mxnet 
keras 
lightGBM
pymc3
pyOD
spacy 
prophet 
sktime 
statsmodels
cuml 
oracle_automl
h2o
transformers 
nltk 
emcee 
pystan 
bert
gensim
flair 
word2vec
ensemble (more than one library) 
other
FrameworkVersion Die Version des ML-Frameworks. Hier kann frei formulierter Text angegeben werden. Beispiel: PyTorch 1.9.
Algorithm Der Algorithmus oder die Modellinstanzklasse. Hier kann frei formulierter Text angegeben werden. Beispiel: CART algorithm.
Hyperparameters Die Hyperparameter des Modellobjekts. Diese haben das JSON-Format.
ArtifactTestResults Die JSON-Ausgabe der Artefakttests auf Clientseite.

Beispiel

In diesem Beispiel wird gezeigt, wie Sie die Modelltaxonomie dokumentieren, indem Sie jedes Schlüssel/Wert-Paar erfassen, sodass eine Liste mit Metadata()-Objekten erstellt wird:

# create the list of defined metadata around model taxonomy:
defined_metadata_list = [
    Metadata(key="UseCaseType", value="image_classification"),
    Metadata(key="Framework", value="keras"),
    Metadata(key="FrameworkVersion", value="0.2.0"),
    Metadata(key="Algorithm",value="ResNet"),
    Metadata(key="hyperparameters",value="{\"max_depth\":\"5\",\"learning_rate\":\"0.08\",\"objective\":\"gradient descent\"}")
]

Benutzerdefinierte Modelltaxonomie

Sie können eigene benutzerdefinierte Metadaten hinzufügen, um Ihr Modell zu dokumentieren. Die maximal zulässige Dateigröße für die Kombination aus definierten und benutzerdefinierten Metadaten beträgt 32000 Byte.

Alle benutzerdefinierten Metadaten weisen die folgenden vier Attribute aus:

Feld oder Schlüssel Erforderlich? Beschreibung
key

Erforderlich

Der Schlüssel und das Label Ihrer benutzerdefinierten Metadaten.
value

Erforderlich

Der an den Schlüssel angehängte Wert.
category

Optional

Die Kategorie der Metadaten. Wählen Sie einen der folgenden fünf Werte aus:

  • Performance
  • Training Profile
  • Training and Validation Datasets
  • Training Environment
  • other

Das Kategorieattribut ist nützlich, um benutzerdefinierte Metadaten zu filtern. Das bietet sich an, wenn eine große Anzahl benutzerdefinierter Metadaten für ein bestimmtes Modell vorhanden ist.

description

Optional

Eine Beschreibung der benutzerdefinierten Metadaten.

Beispiel

In diesem Beispiel wird gezeigt, wie Sie benutzerdefinierte Metadaten hinzufügen können, um die Modellgenauigkeit, die Umgebung und die Quelle der Trainingsdaten zu erfassen:

# Adding your own custom metadata:
custom_metadata_list = [
    Metadata(key="Image Accuracy Limit", value="70-90%", category="Performance",
             description="Performance accuracy accepted"),
    Metadata(key="Pre-trained environment",
             value="https://blog.floydhub.com/guide-to-hyperparameters-search-for-deep-learning-models/",
             category="Training environment", description="Environment link for pre-trained model"),
    Metadata(key="Image Sourcing", value="https://lionbridge.ai/services/image-data/", category="other",
             description="Source for image training data")
]

Definition der Modelldatenschemas

Sie können die Eingabe- und Ausgabedatenschemas von Modellen dokumentieren. Die Definition des Eingabedatenschemas stellt den Blueprint des Parameters data der Funktion predict() der Datei score.py bereit. Sie können das Eingabedatenschema als Definition des Eingabefeaturevektors betrachten, den Ihr Modell für erfolgreiche Vorhersagen benötigt. Die Ausgabeschemadefinition dokumentiert, was die Funktion predict() zurückgibt.

Wichtig

Die maximal zulässige Dateigröße für die Kombination aus Ein- und Ausgabeschemas beträgt 32000 Byte.

Die Schemadefinition für Eingabefeaturevektor und Modellvorhersagen wird zu Dokumentationszwecken verwendet. Diese Richtlinie gilt nur für tabellarische Datasets.

Das Schema des Eingabefeaturevektors und der Ausgabevorhersagen des Modells ist ein JSON-Objekt. Das Objekt verfügt über eine Liste mit dem Schlüssel schema auf oberster Ebene. Die Schemadefinition jeder Spalte ist ein eigener Eintrag in der Liste.

Für jede Spalte kann das Schema vollständig definiert werden, indem allen folgenden Attributen Werte zugewiesen werden:

Feld oder Schlüssel Typ Erforderlich? Beschreibung
name STRING

Erforderlich

Der Name der Spalte.
description STRING

Optional

Die Beschreibung der Spalte.
required BOOL

Erforderlich

Gibt an, ob die Spalte ein erforderliches Eingabefeature für eine Modellvorhersage ist.
dtype STRING

Erforderlich

Der Datentyp der Spalte.
domain OBJECT

Optional

Der Bereich zulässiger Werte für das Feature.

Das Feld domain ist ein Dictionary mit den folgenden Schlüsseln:

Feld oder Schlüssel Typ Erforderlich? Beschreibung Hinweise
domain.constraints LIST

Optional

Unterstützt eine Liste von Prädikaten, um den Bereich zulässiger Werte für das Feature einzuschränken.

Sie können eine sprachspezifische Vorlage für Zeichenfolgenausdrücke eingeben, die vom Sprach-Interpreter und Compiler ausgewertet werden kann. Bei Python muss das Zeichenfolgenformat STRING entsprechen.

Constraints können mit einer Liste von Ausdrücken angegeben werden. Beispiel: constraints=[Expression('$x > 5')].

Sie können mehrere Constraints anwenden.

Beispiel für einen Ausdruck:

  schema:
        - description: Id
          domain:
            constraints: []
            stats:
              25%: 365.75
              50%: 730.5
              75%: 1095.25
              count: 1460.0
              max: 1460.0
              mean: 730.5
              min: 1.0
              std: 421.6100093688479
            values: Discreet numbers
          name: Id
          required: false
          type: int64
        - description: MSSubClass
          domain:
            constraints: []
            stats:
              25%: 20.0
              50%: 50.0
              75%: 70.0
              count: 1460.0
              max: 190.0
              mean: 56.897260273972606
              min: 20.0
              std: 42.300570993810425
            values: Discreet numbers
          name: MSSubClass
          required: false
          type: int64
        - description: MSZoning
          domain:
            constraints:
            - expression: '$x in ["RL", "RM", "C (all)", "FV", "RH"]'
              - RL
              - RM
              - C (all)
              - FV
              - RH
            stats:
              count: 1460
              unique: 5
            values: Category
          name: MSZoning
          required: false
          type: category
domain.stats OBJECT

Optional

Ein Dictionary mit zusammenfassenden Statistiken, die das Feature beschreiben.

Für die Typen float64 und int64:

  • X% (Wobei X ein Perzentilwert zwischen 1 und 99 ist. Es können mehrere Perzentilwerte erfasst werden.)

  • count

  • max

  • mean

  • median

  • min

  • std

Für Kategorie:

  • count

  • unique

  • mode

In ADS werden die Statistiken automatisch basierend auf feature_stat in Featuretypen generiert.

domain.values STRING

Optional

Gibt den semantischen Typ der Spalte an. Unterstützte Werte umfassen:

  • Diskrete Zahlen

  • Zahlen

  • Kategorie

  • Freitext

domain.name STRING

Optional

Name des Attributs.

domain.dtype STRING

Erforderlich

Der Pandas-Datentyp der Daten. Beispiel:

int64
float
category
datettime
domain.dtype STRING

Erforderlich

Der Featuretyp der Daten. Beispiel:

Category
Integer
LatLong, 

Beispiel für ein Eingabedatenschema

schema:
- description: Description of the column
  domain:
    constraints:
    - expression: '($x > 10 and $x <100) or ($x < -1 and $x > -500)' # Here user can input language specific string expression template which can be evaluated by the language interpreter/compiler. In case of python the string format expected to follow string.Template recognized format.
      language: python
    stats:  # This section is flexible key value pair. The stats will depend on what user wants to save. By default, the stats will be automatically generated based on the `feature_stat` in feature types
      mean: 20
      median: 21
      min: 5
    values: numbers # The key idea is to communicate what should be the domain of values that are acceptable. Eg rational numbers, discreet numbers, list of values, etc
  name: MSZoing # Name of the attribute
  required: false # If it is a nullable column

Beispiel für ein Ausgabedatenschema

{
"predictionschema": [
    {
    "description": "Category of SR",
    "domain": {
    "constraints": [],
    "stats": [],
    "values": "Free text"
    },
    "name": "category",
    "required": true,
    "type": "category"
    }
    ]
}

Modellintrospektionstest

  1. Kopieren Sie artifact_introspection_test im Modellartefakt in das Verzeichnis der obersten Ebene des Artefakts.
  2. Installieren Sie eine Python-Version größer als 3.5.
  3. Installieren Sie die Python-Librarys pyyaml und requests. Diese Installation ist nur einmal erforderlich.
  4. Gehen Sie zu Ihrem Artefaktverzeichnis, und installieren Sie die Artefaktintrospektionstests.
    python3 -m pip install --user -r artifact_introspection_test/requirements.txt
  5. Legen Sie den Artefaktpfad fest, und führen Sie den Introspektionstest aus.
    python3 artifact_introspection_test/model_artifact_validate.py --artifact 

    Die Introspektionstests generieren lokale test_json_output.json- und test_json_output.html-Dateien. Beispiel für die Introspektionstestergebnisse im JSON-Format:

    {
        "score_py": {
            "category": "Mandatory Files Check",
            "description": "Check that the file \"score.py\" exists and is in the top level directory of the artifact directory",
            "error_msg": "File score.py is not present.",
            "success": true
        },
        "runtime_yaml": {
            "category": "Mandatory Files Check",
            "description": "Check that the file \"runtime.yaml\" exists and is in the top level directory of the artifact directory",
            "error_msg": "File runtime.yaml is not present.",
            "success": true
        },
        "score_syntax": {
            "category": "score.py",
            "description": "Check for Python syntax errors",
            "error_msg": "Syntax error in score.py: ",
            "success": true
        },
        "score_load_model": {
            "category": "score.py",
            "description": "Check that load_model() is defined",
            "error_msg": "Function load_model is not present in score.py.",
            "success": true
        },
        "score_predict": {
            "category": "score.py",
            "description": "Check that predict() is defined",
            "error_msg": "Function predict is not present in score.py.",
            "success": true
        },
        "score_predict_data": {
            "category": "score.py",
            "description": "Check that the only required argument for predict() is named \"data\"",
            "error_msg": "Function predict in score.py should have argument named \"data\".",
            "success": true
        },
        "score_predict_arg": {
            "category": "score.py",
            "description": "Check that all other arguments in predict() are optional and have default values",
            "error_msg": "All other arguments in predict function in score.py should have default values.",
            "success": true
        },
        "runtime_version": {
            "category": "runtime.yaml",
            "description": "Check that field MODEL_ARTIFACT_VERSION is set to 3.0",
            "error_msg": "In runtime.yaml field MODEL_ARTIFACT_VERSION should be set to 3.0",
            "success": true
        },
        "runtime_env_type": {
            "category": "conda_env",
            "description": "Check that field MODEL_DEPLOYMENT.INFERENCE_ENV_TYPE is set to a value in (published, data_science)",
            "error_msg": "In runtime.yaml field MODEL_DEPLOYMENT.INFERENCE_ENV_TYPE should be set to a value in (published, data_science)",
            "success": true,
            "value": "published"
        },
        "runtime_env_slug": {
            "category": "conda_env",
            "description": "Check that field MODEL_DEPLOYMENT.INFERENCE_ENV_slug is set",
            "error_msg": "In runtime.yaml field MODEL_DEPLOYMENT.INFERENCE_ENV_slug should be set.",
            "success": true,
            "value": "mlgpuv1"
        },
        "runtime_env_path": {
            "category": "conda_env",
            "description": "Check that field MODEL_DEPLOYMENT.INFERENCE_ENV_PATH is set",
            "error_msg": "In runtime.yaml field MODEL_DEPLOYMENT.INFERENCE_ENV_PATH should be set.",
            "success": true,
            "value": "oci://service_conda_packs@ociodscdev/service_pack/gpu/General Machine Learning for GPUs/1.0/mlgpuv1"
        },
        "runtime_path_exist": {
            "category": "conda_env",
            "description": "If MODEL_DEPLOYMENT.INFERENCE_ENV_TYPE is data_science and MODEL_DEPLOYMENT.INFERENCE_ENV_slug is set, check that the file path in MODEL_DEPLOYMENT.INFERENCE_ENV_PATH is correct.",
            "error_msg": "In runtime.yaml field MODEL_DEPLOYMENT.INFERENCE_ENV_PATH doesn't exist.",
            "success": true
        },
        "runtime_slug_exist": {
            "category": "conda_env",
            "description": "If MODEL_DEPLOYMENT.INFERENCE_ENV_TYPE is data_science, check that the slug listed in MODEL_DEPLOYMENT.INFERENCE_ENV_slug exists.",
            "error_msg": "In runtime.yaml the value of the fileld INFERENCE_ENV_slug doesn't exist in the given bucket."
        }
    }
  6. Wiederholen Sie die Schritte 4 und 5, bis keine Fehler auftreten.

Verwenden von ADS für Introspektionstests

Sie können die Introspektion manuell aufrufen, indem Sie die Methode .introspect() für das Objekt ModelArtifact aufrufen.

rf_model_artifact.introspect()
rf_model_artifact.metadata_taxonomy['ArtifactTestResults']

Das Ergebnis der Modellintrospektion wird automatisch in den Taxonomiemetadaten und Modellartefakten gespeichert. Die Modellintrospektion wird automatisch ausgelöst, wenn die Methode .prepare() zur Vorbereitung des Modellartefakts aufgerufen wird.

Die Methode .save() führt keine Modellintrospektion aus, weil dies normalerweise während der Modellartefaktvorbereitungsphase erfolgt. Wenn Sie ignore_introspection jedoch auf False setzen, wird die Modellintrospektion während des Speichervorgangs ausgeführt.