Einführung
Nvidia hat das neueste Kleines Sprachmodell (SLM) namens Nemotron-Mini-4B-Instruct. SLM ist die destillierte, quantisierte und fein abgestimmte Model des größeren Basismodells. SLM wurde hauptsächlich für Geschwindigkeit und Bereitstellung auf dem Gerät entwickelt. Nemotron-mini-4B ist eine fein abgestimmte Model von Nvidia Minitron-4B-Base, einer beschnittenen und destillierten Model von Nemotron-4 15B. Dieses Instruct-Modell optimiert Rollenspiele, RAG-QA und Funktionsaufrufe in englischer Sprache. Es wurde zwischen Februar 2024 und August 2024 trainiert und berücksichtigt die neuesten Ereignisse und Entwicklungen weltweit.
Dieser Artikel untersucht Nvidias Nemotron-Mini-4B-Instruct, ein Small Language Mannequin (SLM). Wir werden seine Weiterentwicklung aus dem größeren Modell Nemotron-4 15B erörtern und uns dabei auf seine reduzierte und fein abgestimmte Natur für Geschwindigkeit und Bereitstellung auf dem Gerät konzentrieren. Darüber hinaus beleuchten wir seine Trainingsphase von Februar bis August 2024 und zeigen, wie es die neuesten globalen Entwicklungen einbezieht und es zu einem leistungsstarken Werkzeug in Echtzeit-KI-Anwendungen macht.
Lernergebnisse
- Verstehen Sie die Architektur und Optimierungstechniken hinter Small Language Fashions (SLMs) wie Nvidias Nemotron-Mini-4B-Instruct.
- Erfahren Sie, wie Sie eine Entwicklungsumgebung für die Implementierung von SLMs mit Conda einrichten und wichtige Bibliotheken installieren.
- Sammeln Sie praktische Erfahrung beim Codieren eines Chatbots, der das Nemotron-Mini-4B-Instruct-Modell für interaktive Konversationen nutzt.
- Entdecken Sie reale Anwendungen von SLMs in der Spieleindustrie und anderen Branchen und heben Sie ihre Vorteile gegenüber größeren Modellen hervor.
- Entdecken Sie den Unterschied zwischen SLMs und LLMs, einschließlich ihrer Ressourceneffizienz und Anpassungsfähigkeit an bestimmte Aufgaben.
Dieser Artikel erschien im Rahmen der Knowledge Science-Blogathon.
Was sind Small Language Fashions (SLMs)?
Kleine Sprachmodelle (SLMs) dienen als kompakte Versionen von große Sprachmodelleentwickelt, um NLP-Aufgaben mit reduzierten Rechenressourcen auszuführen. Sie optimieren Effizienz und Geschwindigkeit und liefern bei bestimmten Aufgaben oft eine gute Leistung mit weniger Parametern. Diese Funktionen machen sie splendid für Edge-Geräte oder On-Machine-Computing mit begrenztem Speicher und begrenzter Verarbeitungsleistung. Diese Modellkategorien sind weniger leistungsstark als das LLM, können aber bei domänenbezogenen Aufgaben bessere Ergebnisse erzielen.
Trainingstechniken für kleine Sprachmodelle
Normalerweise trainieren Entwickler oder Feinabstimmung kleiner Sprachmodelle (SLMs) aus großen Sprachmodellen (LLMs) durch Verwendung verschiedener Techniken, die die Größe des Modells reduzieren und gleichzeitig ein angemessenes Leistungsniveau beibehalten.
- Wissensdestillation: Das LLM wird zum Trainieren des kleineren Modells verwendet, wobei das LLM als Ausbilder und das SLM als Coach fungiert. Das kleine Modell lernt, die Ergebnisse des Ausbilders nachzuahmen, wobei es das wesentliche Wissen erfasst und gleichzeitig die Komplexität reduziert.
- Parameterbereinigung: Der Trainingsprozess entfernt redundante oder weniger wichtige Parameter aus dem LLM und reduziert so die Modellgröße, ohne die Leistung drastisch zu beeinträchtigen.
- Quantisierung: Modellgewichte werden von Formaten mit höherer Präzision, beispielsweise 32-Bit, in Formate mit niedrigerer Präzision, beispielsweise 8-Bit oder 4-Bit, konvertiert, was den Speicherverbrauch reduziert und die Berechnungen beschleunigt.
- Aufgabenspezifisches Feindrehen: Ein vorab trainiertes LLM wird anhand eines kleineren Datensatzes für eine bestimmte Aufgabe feinabgestimmt, wobei das kleinere Modell für gezielte Aufgaben wie Rollenspiele und QA-Chat optimiert wird.
Dies sind einige der modernsten Techniken zur Optimierung von SLM.
Bedeutung von SLMs in der heutigen KI-Landschaft
Small Language Fashions (SLMs) spielen aufgrund ihrer Effizienz, Skalierbarkeit und Zugänglichkeit eine entscheidende Rolle in der aktuellen KI-Landschaft. Hier sind einige wichtige:
- Ressourceneffizienz: SLMs benötigen erheblich weniger Rechenleistung, Speicher und Speicherplatz und sind daher splendid für cellular Anwendungen auf Geräten.
- Schnellere Schlussfolgerung: Ihre geringere Größe ermöglicht schnellere Inferenzzeiten, was für Echtzeitanwendungen wie Chatbots, Sprachassistenten und IoT-Geräte unerlässlich ist.
- Kostengünstig: Das Trainieren und Bereitstellen großer Sprachmodelle kann teuer sein. SLMs bieten Unternehmen und Entwicklern eine kostengünstigere Lösung und demokratisieren den Zugang zu KI.
- Nachhaltigkeit: Aufgrund ihrer Größe können Benutzer SLMs einfacher für bestimmte Aufgaben oder Nischenanwendungen optimieren, was eine größere Anpassungsfähigkeit in einer Vielzahl von Branchen, einschließlich Gesundheitswesen und Einzelhandel, ermöglicht.
Praktische Anwendungen von Nemotron-Mini-4B
NVIDIA hat auf der Gamescom 2024 das erste On-Machine-SLM zur Verbesserung der Konversationsfähigkeiten von Spielcharakteren angekündigt. Das Spiel Mecha BREAK von Superb Seasun Video games nutzt die NVIDIA ACE-Suite, eine digitale menschliche Technologie, die Sprache, Intelligenz und Animation ermöglicht. generative KI.
Einrichten Ihrer Entwicklungsumgebung
Für die erfolgreiche Entwicklung Ihres Chatbots ist die Schaffung einer robusten Entwicklungsumgebung unerlässlich. Dieser Schritt umfasst die Konfiguration der erforderlichen Instruments, Bibliotheken und Frameworks, mit denen Sie Ihren Code effizient schreiben, testen und verfeinern können.
Schritt 1: Erstellen Sie eine Conda-Umgebung
Erstellen Sie zunächst eine Anaconda-Umgebung ( Anakonda). Geben Sie den folgenden Befehl in Ihr Terminal ein.
# Create conda env
$ conda create -n nemotron python=3.11
Es wird eine Python 3.11-Umgebung mit dem Namen „nemotron“ erstellt.
Schritt 2: Aktivieren der Entwicklungsumgebung
Das Einrichten einer Entwicklungsumgebung ist ein entscheidender Schritt beim Erstellen Ihres Chatbots, da sie die erforderlichen Instruments und Frameworks zum Codieren und Testen bereitstellt. Wir führen Sie durch den Prozess der Aktivierung Ihrer Entwicklungsumgebung und stellen sicher, dass Sie über alles verfügen, was Sie benötigen, um Ihren Chatbot nahtlos zum Leben zu erwecken.
# Create a deve folder and activate the anaconda env
$ mkdir nemotron-dev
$ cd nemotron-dev
# Activaing nemotron conda env
$ conda activate nemotron
Schritt 3: Wichtige Bibliotheken installieren
Installieren Sie zunächst PyTorch Richten Sie Ihre Entwicklerumgebung entsprechend Ihrem Betriebssystem ein. Installieren Sie dann Transformers und Langchain mit PIP.
# Set up Pytorch (Home windows) for GPU
pip set up torch torchvision torchaudio --index-url https://obtain.pytorch.org/whl/cu118
# Set up PyTorch (Home windows) CPU
pip set up torch torchvision torchaudio
Zweitens: Installieren Sie Transformatoren und Langchain.
# Set up transformers, Langchain
pip set up transformers, langchain
Code-Implementierung für einen einfachen Chatbot
Haben Sie sich schon einmal gefragt, wie Sie einen Chatbot erstellen können, der eine Konversation führen kann? In diesem Abschnitt führen wir Sie durch die Code-Implementierung eines einfachen Chatbots. Sie erfahren mehr über die wichtigsten Komponenten, programming lanMessgeräteund Bibliotheken, die am Aufbau eines funktionalen Konversationsagenten beteiligt sind, sodass Sie eine ansprechende und interaktive Benutzererfahrung gestalten können.
from transformers import AutoTokenizer, AutoModelForCausalLM
# Load the tokenizer and mannequin
tokenizer = AutoTokenizer.from_pretrained("nvidia/Nemotron-Mini-4B-Instruct")
mannequin = AutoModelForCausalLM.from_pretrained("nvidia/Nemotron-Mini-4B-Instruct")
# Use the immediate template
messages = (
{
"function": "system",
"content material": "You're pleasant chatbot, reply on model of a Professor",
},
{"function": "person", "content material": "What's Quantum Entanglement?"},
)
tokenized_chat = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt")
outputs = mannequin.generate(tokenized_chat, max_new_tokens=128)
print(tokenizer.decode(outputs(0)))
Hier laden wir das Nemotron-Mini-4B-Instruct (Nemo) von Hugginface Hub über die Transformatoren AutoModelForCausalLM und den Tokenizer mit AutoTokenizer herunter.
Erstellen einer Nachrichtenvorlage
Erstellen Sie eine Nachrichtenvorlage für einen Professor-Chatbot und stellen Sie die Frage „Was ist Quantenverschränkung?“
Mal sehen, wie Nemo diese Frage beantwortet.
Wow, die Antwort conflict ziemlich intestine. Wir werden jetzt einen benutzerfreundlicheren Chatbot erstellen, um kontinuierlich mit ihm zu chatten.
Erstellen eines erweiterten, benutzerfreundlichen Chatbots
Wir werden den Prozess der Entwicklung eines fortschrittlichen, benutzerfreundlichen Chatbots untersuchen, der nicht nur die Bedürfnisse der Benutzer erfüllt, sondern auch ihr Interaktionserlebnis verbessert. Wir werden die wesentlichen Komponenten, Designprinzipien und Technologien besprechen, die bei der Entwicklung eines Chatbots erforderlich sind, der intuitiv und reaktionsschnell ist und die Absichten der Benutzer versteht, um letztendlich die Lücke zwischen Technologie und Benutzerzufriedenheit zu schließen.
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer
from threading import Thread
import time
class PirateBot:
def __init__(self, model_name="nvidia/Nemotron-Mini-4B-Instruct"):
print("Ahoy! Yer pirate bot be loadin' the mannequin. Stand by, ye scurvy canine!")
self.tokenizer = AutoTokenizer.from_pretrained(model_name)
self.mannequin = AutoModelForCausalLM.from_pretrained(model_name)
# Transfer mannequin to GPU if obtainable
self.gadget = "cuda" if torch.cuda.is_available() else "cpu"
self.mannequin.to(self.gadget)
print(f"Arrr! The mannequin be prepared on {self.gadget}!")
self.messages = (
{
"function": "system",
"content material": "You're a pleasant chatbot who at all times responds within the model of a pirate",
}
)
def generate_response(self, user_input, max_new_tokens=1024):
self.messages.append({"function": "person", "content material": user_input})
tokenized_chat = self.tokenizer.apply_chat_template(
self.messages,
tokenize=True,
add_generation_prompt=True,
return_tensors="pt"
).to(self.gadget)
streamer = TextIteratorStreamer(self.tokenizer, timeout=10., skip_prompt=True, skip_special_tokens=True)
generation_kwargs = dict(
inputs=tokenized_chat,
max_new_tokens=max_new_tokens,
streamer=streamer,
do_sample=True,
top_p=0.95,
top_k=50,
temperature=0.7,
num_beams=1,
)
thread = Thread(goal=self.mannequin.generate, kwargs=generation_kwargs)
thread.begin()
print("Pirate's response: ", finish="", flush=True)
generated_text = ""
for new_text in streamer:
print(new_text, finish="", flush=True)
generated_text += new_text
time.sleep(0.05) # Add a small delay for a extra pure really feel
print("n")
self.messages.append({"function": "assistant", "content material": generated_text.strip()})
return generated_text.strip()
def chat(self):
print("Ahoy, matey! I be yer pirate chatbot. What treasure of data ye be seekin'?")
whereas True:
user_input = enter("You: ")
if user_input.decrease() in ('exit', 'stop', 'goodbye'):
print("Farewell, ye landlubber! Could truthful winds discover ye!")
break
attempt:
self.generate_response(user_input)
besides Exception as e:
print(f"Blimey! We have hit tough seas: {str(e)}")
if __name__ == "__main__":
bot = PirateBot()
bot.chat()
Der obige Code besteht aus drei Funktionen:
- __init__-Funktion
- Antwort generieren
- Chatten
Die Init-Funktion ist größtenteils selbsterklärend, sie verfügt über einen Tokenizer, ein Modell, ein Gerät und eine Antwortvorlage für unseren Pirate Bot.
Die Funktion „Antwort generieren“ hat zwei Eingaben: user_input und max_new_tokens. Die Benutzereingabe wird an eine Liste namens „Nachricht“ angehängt und die Rolle ist der Benutzer. Die „self.message“ verfolgt den Gesprächsverlauf zwischen dem Benutzer und dem Assistenten. Die TextIteratorStreamer
erstellt ein Streamer-Objekt, das das Reside-Streaming der Antwort des Modells handhabt. Dadurch können wir die Ausgabe direkt beim Generieren ausdrucken und so ein natürlicheres Gesprächsgefühl erzeugen.
Beim Generieren der Antwort wird ein neuer Thread verwendet, um die Funktion „Generate“ aus dem Modell auszuführen, die die Antwort des Assistenten generiert. Der Streamer beginnt mit der Ausgabe des Textes, während er in Echtzeit vom Modell generiert wird.
Die Antwort wird Stück für Stück gedruckt, während sie generiert wird, wodurch ein Tippeffekt simuliert wird. Eine kleine Verzögerung (time.sleep(0.05)) fügt eine Pause zwischen den Ausgaben hinzu, um ein natürlicheres Gefühl zu vermitteln.
Den Chatbot testen: Seine Wissensfähigkeiten erkunden
Wir werden uns nun mit der Testphase unseres Chatbots befassen und uns dabei auf seine Wissenskompetenz und Reaktionsfähigkeit konzentrieren. Indem wir den Bot über verschiedene Abfragen einbeziehen, möchten wir seine Fähigkeit bewerten, genaue und relevante Informationen bereitzustellen, und die Wirksamkeit des zugrunde liegenden Small Language Mannequin (SLM) bei der Bereitstellung aussagekräftiger Interaktionen hervorheben.
Die Benutzeroberfläche dieses Chatbots
Wir werden Nemo verschiedene Arten von Fragen stellen, um seine Wissenskapazitäten zu erkunden.
Was ist Quantenteleportation?
Ausgabe:
Was ist geschlechtsspezifische Gewalt?
Ausgabe:
Erklären Sie den Travelling Gross sales Man(TSM)-Algorithmus
Der Handlungsreisenden-Algorithmus findet den kürzesten Weg zwischen zwei Punkten, beispielsweise vom Restaurant zum Lieferort. Alle Kartendienste verwenden diesen Algorithmus, um Navigationsrouten für Autofahrer bereitzustellen, und Internetdienstanbieter verwenden ihn, um Antworten auf Anfragen zu liefern.
Ausgabe:
Implementieren Sie Travelling Sale Man in Python
Ausgabe:
Wir sehen, dass das Modell bei allen Fragen etwas besser funktioniert. Wir haben unterschiedliche Fragetypen aus unterschiedlichen Themenbereichen abgefragt.
Abschluss
Nemotron Mini 4B ist ein sehr leistungsfähiges Modell für Geschäftsanwendungen. Es wird bereits von einem Spieleunternehmen mit der Nvidia ACE-Suite verwendet. Nemotron Mini 4B ist nur der Anfang der hochmodernen Anwendung generativer KI-Modelle in der Spielebranche, die direkt auf dem Pc des Spielers ausgeführt werden und dessen Spielerlebnis verbessern. Dies ist die Spitze des Eisbergs. In den kommenden Tagen werden wir weitere Ideen rund um das SLM-Modell erkunden.
Die wichtigsten Erkenntnisse
- SLMs verbrauchen weniger Ressourcen und ermöglichen schnellere Inferenzen, sodass sie sich für Echtzeitanwendungen eignen.
- Nemotron-Mini-4B-Instruct ist ein industriereifes Modell, das bereits in Spielen über NVIDIA ACE verwendet wird.
- Das Modell basiert auf dem Nemotron-4-Basismodell.
- Nemotron-Mini eignet sich hervorragend für Anwendungen, die für Rollenspiele, das Beantworten von Fragen aus Dokumenten und Funktionsaufrufe konzipiert sind.
Häufig gestellte Fragen
A. SLMs sind ressourceneffizienter als LLMs. Sie sind speziell für On-Machine-, IoT- und Edge-Geräte konzipiert.
A. Ja, Sie können SLMs für bestimmte Aufgaben wie Textklassifizierung, Chatbots, Rechnungserstellung für Gesundheitsdienstleistungen, Kundenbetreuung sowie Dialoge und Charaktere im Spiel optimieren.
A. Ja, Sie können Nemotron-Mini-4B-Instruct direkt über Ollama verwenden. Installieren Sie einfach Ollama und geben Sie dann Ollama run nemotron-mini-4b-instruct ein. Das ist alles, Sie können direkt über die Befehlszeile Fragen stellen.
Die in diesem Artikel gezeigten Medien sind nicht Eigentum von Analytics Vidhya und werden nach Ermessen des Autors verwendet.