In der Informatik ist eine Instanz (auch Token in Metalogik und Metamathematik genannt) ein spezifisches Vorkommen eines Softwareelements, das auf einer Typdefinition basiert. Wenn ein solches Vorkommen erstellt wird, sagt man, es wurde instanziiert, und sowohl der Erstellungsprozess als auch das resultierende Vorkommen werden als Instanziierung bezeichnet. Das Konzept ist in vielen Bereichen der Informatik von grundlegender Bedeutung, von der objektorientierten Programmierung über künstliche Intelligenz bis hin zur Cloud-Infrastruktur.
Der Begriff leitet sich von der breiteren philosophischen und logischen Vorstellung einer Instanz als einem besonderen Beispiel einer allgemeinen Klasse oder eines Musters ab. In der Informatik bietet er eine Möglichkeit, zwischen einer Definition (wie einer Klasse, Vorlage oder einem Modell) und den konkreten, nutzbaren Realisierungen dieser Definition zu unterscheiden. Jede Instanz hat typischerweise ihre eigene Identität, ihren eigenen Zustand und ihren eigenen Lebenszyklus, selbst wenn sie strukturelle Merkmale mit anderen Instanzen desselben Typs teilt.
Instanzen in Programmiersprachen
In der objektorientierten Programmierung ist eine Instanz ein Objekt, das aus einem Klassentyp erstellt wird. Die Klasse definiert die Struktur (Attribute) und das Verhalten (Methoden), die alle ihre Instanzen gemeinsam haben, aber jede Instanz behält ihre eigene Identität und ihren eigenen Zustand. Zum Beispiel könnte eine Car-Klasse Eigenschaften wie Farbe und Geschwindigkeit definieren, und jedes einzelne Auto-Objekt, das aus dieser Klasse erstellt wird, ist eine eigene Instanz mit eigenen Werten für diese Eigenschaften.
Das Konzept erscheint auch in prozeduralen Kontexten. In der Simula-Sprache, die viele objektorientierte Ideen einführte, kann jeder Prozeduraufruf als eine Instanz dieser Prozedur betrachtet werden: eine Aktivierung mit eigenen Parametern und lokalen Variablen. Diese Perspektive behandelt eine Prozedurdefinition als Vorlage und jeden Aufruf als konkretes Vorkommen, was für das Verständnis von Rekursion und Aufrufstapeln nützlich ist.
In POSIX-orientierten Betriebssystemen ist ein laufender Prozess eine Instanz eines Programms. Ein Programm ist eine statische Datei, die Anweisungen enthält, während ein Prozess eine dynamische Ausführung dieser Anweisungen ist. Prozesse werden über Systemaufrufe wie fork() und exec() instanziiert, und jeder ausführende Prozess ist eine Instanz des Programms, aus dem er instanziiert wurde. Mehrere Instanzen desselben Programms können gleichzeitig laufen, jede mit eigenem Speicherplatz und Ausführungszustand.
Instanzen in künstlicher Intelligenz und maschinellem Lernen
In moderner künstlicher Intelligenz und maschinellem Lernen erscheint das Instanzkonzept in mehreren Formen. In KI-Systemen auf Chat-Basis, die oft auf großen Sprachmodellen basieren, kann ein Assistent über viele unabhängige Konversationssitzungen aufgerufen werden, die oft als Threads bezeichnet werden. Jeder Thread hat seinen eigenen Nachrichtenverlauf, und eine spezifische Ausführung des Assistenten über diese Sitzung kann als ein Run dargestellt werden, der eine Ausführung auf einem Thread ist. Dies ermöglicht es demselben zugrunde liegenden Modell, viele Benutzer gleichzeitig zu bedienen, wobei jede Konversation eine eigene Instanz des Verhaltens des Assistenten ist.
Im Deep Learning wird ein Trainingsbeispiel oder Datenpunkt manchmal als Instanz des Datensatzes bezeichnet. Jede Instanz ist eine spezifische Realisierung der Datenverteilung, aus der das Modell lernt. Die Unterscheidung zwischen einer Modelldefinition und ihren trainierten Instanzen ist ebenfalls wichtig: Eine neuronale Netzwerkarchitektur definiert eine Klasse möglicher Modelle, und das Training erzeugt eine spezifische Instanz mit bestimmten gelernten Gewichten.
Instanzen in Cloud Computing und Virtualisierung
In Cloud Computing und Virtualisierung bezieht sich eine Instanz üblicherweise auf eine bereitgestellte virtuelle Maschine oder einen virtuellen Server mit einer zugewiesenen Kombination aus Rechen-, Speicher-, Netzwerk- und Speicherressourcen. Große Cloud-Anbieter wie Amazon Web Services, Microsoft Azure und Google Cloud bieten verschiedene Instanztypen an, die für unterschiedliche Arbeitslasten optimiert sind, von allgemeiner Rechenleistung bis hin zu GPU-beschleunigtem Training von KI-Modellen.
Zum Beispiel sind AWS-Trainium-Instanzen auf das Training von Modellen für maschinelles Lernen spezialisiert, während Oracle Cloud und Alibaba Cloud ihre eigenen Instanzfamilien bereitstellen. Der Lebenszyklus einer Cloud-Instanz umfasst typischerweise die Erstellung aus einem Maschinenabbild oder einer Vorlage, die Konfiguration, die Nutzung und die eventuelle Beendigung. Diese Abstraktion ermöglicht es Benutzern, Ressourcen dynamisch zu skalieren, ohne physische Hardware zu verwalten.
Instanzen in Computergrafik
In der Computergrafik ist Instanziierung eine Technik, bei der ein polygonales Modell mehrmals mit verschiedenen Transformationen und Parametern gezeichnet wird, wodurch die Leistung verbessert wird, indem gemeinsame Geometriedaten wiederverwendet werden. Anstatt die vollständige Geometrie für jedes Objekt zu senden, sendet das System die Geometrie einmal und spezifiziert dann mehrere Instanzen mit unterschiedlichen Positionen, Rotationen, Skalierungen oder anderen Attributen. Dies wird häufig in Videospielen und Simulationen verwendet, um große Mengen ähnlicher Objekte wie Bäume, Partikel oder Menschenmengen effizient zu rendern.
Verwandte Konzepte und Unterscheidungen
Das Instanzkonzept ist eng mit der Typ-Token-Unterscheidung in Logik und Linguistik verwandt. Ein Typ ist eine allgemeine Kategorie, während ein Token ein spezifisches Vorkommen ist. In der Programmierung ist eine Klasse oder Vorlage ein Typ, und jedes daraus erstellte Objekt oder jeder Prozess ist ein Token oder eine Instanz. Diese Unterscheidung ist auch in der Datenaugmentation relevant, wo neue Trainingsinstanzen aus bestehenden durch Anwendung von Transformationen erzeugt werden.
In der generativen KI kann jede von einem Modell erzeugte Ausgabe als eine Instanz des Verhaltens des Modells betrachtet werden, konditioniert auf eine spezifische Eingabe oder einen Prompt. Die Vorstellung der Instanziierung wird auch in Transformer-Architekturen verwendet, wo jede Eingabesequenz als eine spezifische Instanz des Eingaberaums des Modells verarbeitet wird. Das Verständnis von Instanzen ist wesentlich für das Debugging, das Ressourcenmanagement und das Denken über das Verhalten komplexer Softwaresysteme.