In diesem Blogbeitrag werde ich Sie Schritt für Schritt durch den Prozess der Ausführung des ChatGPT- Konkurrenten von MosaicML, MPT-7B, auf Ihrer eigenen AWS SageMaker-Instanz führen.
Sind Sie von den Funktionen von ChatGPT begeistert, haben aber Bedenken, Ihre sensiblen Daten OpenAI preiszugeben? Glücklicherweise gibt es Alternativen, die Sie auf Ihrer eigenen Infrastruktur ausführen können. Eine solche Alternative ist MPT-7b von MosaicML, ein Konkurrent von ChatGPT, den wir in diesem Blogbeitrag untersuchen werden.
MosaicML, das kürzlich von Databricks für 1,3 Milliarden US-Dollar übernommen wurde , hat mit seinem MPT-7B-Modell, einem angeblichen Konkurrenten von ChatGPT, in der ML-Community für Aufsehen gesorgt. Obwohl es vielversprechend ist, kann die Ausführung dieses Modells aufgrund der spärlichen Dokumentation und des hohen Ressourcenbedarfs entmutigend sein. Man kann MPT-7B jedoch auf AWS SageMaker in einem Jupyter-Notebook ausführen, einer Umgebung, die einsteigerfreundlich und äußerst flexibel für eine schnelle Iteration ist. Mit diesem Setup können Sie die Machbarkeit und Hardwareanforderungen des Modells testen, bevor Sie sich für die Produktion entscheiden.
Das Ausführen von MPT-7B in einem Jupyter-Notebook auf AWS SageMaker bietet mehrere Vorteile. Sie können nicht nur nur für das bezahlen, was Sie nutzen, und es deaktivieren, wenn Sie fertig sind, sondern die Möglichkeit, Teile Ihres Codes einfach erneut auszuführen, ohne das Modell neu laden zu müssen, spart Zeit bei der iterativen Entwicklung. Aber Vorsicht! Wenn Sie vergessen, Ihre Notebook-Instanzen zu stoppen, können sich die Kosten schnell summieren.
Obwohl diese Methode relativ praktisch ist, müssen Sie einige Überlegungen berücksichtigen. Erstens kann das Laden des Modells selbst auf einer Hochleistungs-GPU bis zu 20 Minuten dauern, was diesen Vorgang etwas zeitaufwändig macht. Auch die Kosten sind ein zu berücksichtigender Faktor, da die laufenden Kosten mindestens 4 US-Dollar pro Stunde betragen. Sie müssen MPT-7B auf mindestens einer p3.2xlarge- Instanz ausführen; alles kleinere scheint nicht machbar. Wenn Sie sich für EC2 anstelle von SageMaker entscheiden, müssen Sie AWS um Erlaubnis zur Verwendung einer p3.2xlarge- Instanz bitten.
In den nächsten Abschnitten erkläre ich Ihnen Schritt für Schritt, wie Sie das MPT-7B-Modell in Ihrem eigenen SageMaker-Jupyter-Notebook ausführen:
Starten Sie die AWS-Konsole und suchen Sie nach SageMaker:
Wählen Sie im Menü auf der linken Seite Notebook->Notebook-Instanzen aus:
Klicken Sie auf die Schaltfläche „Notebook-Instanz erstellen“ :
Geben Sie einen Instanznamen an. Wählen Sie den Instanztyp m1.p3.2xlarge . Leider scheint eine so leistungsstarke Instanz wie m1.p3.2xlarge erforderlich zu sein, da Ihrer Instanz sonst möglicherweise nicht mehr genügend Arbeitsspeicher zur Verfügung steht oder die Beantwortung selbst der einfachsten Fragen übermäßig lange dauert. Bitte beachten Sie jedoch, dass diese Instanz etwa 4 US-Dollar pro Stunde kostet. Daher ist es wichtig, Ihre Nutzung sorgfältig zu überwachen.
Wenn Ihre Testumgebung keine besonders vertraulichen Daten enthält, können Sie Zugriff auf einen beliebigen S3-Bucket gewähren. Andernfalls müssen Sie expliziter sein.
Das Notebook befindet sich dann im Status „Ausstehend“ . Dies wird wahrscheinlich etwa 10 Minuten dauern:
In der Zwischenzeit laden wir ein Notebook herunter, damit wir es hochladen können, nachdem die Bereitstellung der AWS SageMaker-Instanz abgeschlossen ist.
Besuchen Sie das Notebook unter MPT-7B auf AWS SageMaker.ipynb und laden Sie es herunter:
In diesem Notizbuch werden Sie zwei Hauptcodeblöcke bemerken. Der erste Block lädt den MPT-7B-Tokenizer und das Modell:
from torch import cuda, bfloat16 from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig device = f'cuda:{cuda.current_device()}' if cuda.is_available() else 'cpu' tokenizer = AutoTokenizer.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True) config={"init_device": "meta"} model = AutoModelForCausalLM.from_pretrained("mosaicml/mpt-7b-chat", trust_remote_code=True, config=config, torch_dtype=bfloat16) print(f"device={device}") print('model loaded')
Der Tokenizer wird verwendet, um die an das Modell gesendete Frage zu kodieren und die Antwort des Modells zu dekodieren. Darüber hinaus erhalten wir die Gerätespezifikation für unsere GPU, damit wir das Modell für die spätere Nutzung konfigurieren können:
import time from IPython.display import Markdown import torch from transformers import StoppingCriteria, StoppingCriteriaList # mtp-7b is trained to add "<|endoftext|>" at the end of generations stop_token_ids = [tokenizer.eos_token_id] # Define custom stopping criteria object. # Source: https://github.com/pinecone-io/examples/blob/master/generation/llm-field-guide/mpt-7b/mpt-7b-huggingface-langchain.ipynb class StopOnTokens(StoppingCriteria): def __call__(self, input_ids: torch.LongTensor,scores: torch.FloatTensor, **kwargs) -> bool: for stop_id in stop_token_ids: if input_ids[0][-1] == stop_id: return True return False stopping_criteria = StoppingCriteriaList([StopOnTokens()]) def ask_question(question, max_length=100): start_time = time.time() # Encode the question input_ids = tokenizer.encode(question, return_tensors='pt') # Use the GPU input_ids = input_ids.to(device) # Generate a response output = model.generate( input_ids, max_new_tokens=max_length, temperature=0.9, stopping_criteria=stopping_criteria ) # Decode the response response = tokenizer.decode(output[:, input_ids.shape[-1]:][0], skip_special_tokens=True) end_time = time.time() duration = end_time - start_time display(Markdown(response)) print("Function duration:", duration, "seconds")
Beachten Sie die Verwendung von stopping_critera
, die erforderlich ist, da das Modell sonst einfach weiterplappert, selbst nachdem es unsere Frage beantwortet hat.
Sehen Sie sich die Modellgenerierungsparameter an, wenn Sie die verschiedenen Optionen erkunden möchten.
Jetzt laden wir dieses Notizbuch auf SageMaker hoch.
Hoffentlich ist die Bereitstellung Ihrer SageMaker-Notebook-Instanz zu diesem Zeitpunkt abgeschlossen. Wenn dies der Fall ist, klicken Sie auf den Link „Jupyter öffnen“ :
Klicken Sie dann oben rechts auf dem Bildschirm auf die Schaltfläche „Hochladen“ und wählen Sie das Notizbuch aus, das Sie gerade heruntergeladen haben:
Setzen Sie den Kernel auf conda_python3 :
Wählen Sie Zelle -> Alle ausführen :
Anschließend erscheint im Browser-Tab ein Sanduhr-Logo:
Anschließend müssen Sie etwa 10 Minuten warten, bis das Modell heruntergeladen ist:
Nachdem es ausgeführt wurde, sehen Sie die Antwort auf die Frage Erklären Sie mir den Unterschied zwischen Kernspaltung und Kernfusion :
Da das Modell und der Tokenizer oben bereits geladen wurden, können Sie einfach den Codeblock „ask_question “ ändern und auf die Schaltfläche „Ausführen “ klicken, um weitere Fragen zu stellen. Dadurch ersparen Sie sich den Zeitaufwand für jedes Mal, wenn Sie eine neue Frage testen möchten.
Sobald Sie das Testen des Modells abgeschlossen haben, möchten Sie zu Ihrer Liste der Notebook-Instanzen zurückkehren und es stoppen. Wenn Sie das nicht tun, summieren sich die 4 $ pro Stunde sehr schnell 💸
In Bezug auf die Leistung deuten meine vorläufigen Tests darauf hin, dass die Ergebnisse von MPT-7B möglicherweise nicht so gut sind wie die von ChatGPT. Es leistet gute Arbeit bei der Beantwortung von Fragen wie:
Aber für Fragen wie „Was ist die Hauptstadt von Belize?“ es scheitert ganz furchtbar:
Ich sammle derzeit weitere Daten und werde in einem Folge-Blogbeitrag eine umfassende Vergleichsanalyse durchführen. In diesem Beitrag werde ich die Frage- und Antwortleistung von MPT-7B, MPT-30B, Falcon-40b und ChatGPT anhand des tatsächlichen Gesprächsverlaufs vergleichen.
Sobald Sie bereit sind, vom Test zur Produktion überzugehen, bietet SageMaker einen zusätzlichen Vorteil – die Möglichkeit, einen Endpunkt für Ihr Modell zu erstellen. Mit SageMaker können Sie je nach Bedarf automatisch bis zum Endpunkt skalieren und so Ihre Ressourcen optimieren.
Bedenken Sie, dass Ihr Prozess während der Ausführung in einem Jupyter-Notebook leicht abgezweigt werden kann und nicht mehr über genügend Arbeitsspeicher verfügt. Wenn dies passiert, fahren Sie einfach den Kernel herunter und führen Sie alle Befehle erneut aus.
Wenn Sie daran interessiert sind, dieses Modell auf einer anderen Plattform als AWS auszuführen, ist Google Colab Pro eine weitere praktikable Option für 9 $/Monat. Bei unseren Tests haben wir jedoch festgestellt, dass wir das bereitgestellte Guthaben innerhalb weniger Stunden aufgebraucht hatten. 😳
Eine weitere Herausforderung, der Sie möglicherweise gegenüberstehen, ist die Unfähigkeit, die Triton-Optimierung auf SageMaker aufgrund einer Inkompatibilität mit der CUDA-Version zu nutzen. Leider enthalten die aktuellen P3-Instanzen von AWS keine aktuelle CUDA-Version. Wenn Sie die Triton-Optimierung nutzen möchten, müssen Sie daher einen EC2-Container mit Befehlszeilenzugriff erstellen. Beachten Sie jedoch, dass Sie auch eine Sondergenehmigung vom AWS-Support benötigen, um eine Instanz mit 8 VCPUs auszuführen. In einem zukünftigen Beitrag werde ich eine detaillierte Anleitung zur Integration von Triton und zur Nutzung eines kostengünstigeren GPU-Cloud-Anbieters wie Lambda Labs bereitstellen.
Während der MPT-7B von MosaicML eine praktikable Alternative zum ChatGPT von OpenAI darstellt, bringt er seine eigenen Herausforderungen mit sich. Die Ausführung des Modells kann zeitaufwändig und teuer sein und es fehlt die verfügbare Dokumentation. Allerdings kann die Möglichkeit, das Modell intern zu behalten und Ihre Daten vor der Offenlegung durch OpenAI zu schützen, für bestimmte Anwendungsfälle überzeugend sein.
SageMaker bietet großen Komfort zum schnellen Testen des Modells und bietet die Flexibilität, zur Produktion überzugehen, wenn Sie dazu bereit sind. Unabhängig davon, ob Sie gerade erst mit dem MPT-7B beginnen oder es schon eine Weile nutzen, wir hoffen, dass Ihnen dieser Leitfaden wertvolle Erkenntnisse liefert.
Seien Sie gespannt auf unseren nächsten Blogbeitrag, in dem wir uns eingehender mit den Leistungsvergleichen zwischen MPT-7B, MPT-30B, Falcon-40b und ChatGPT befassen.
Sehen Sie sich die folgenden Links an, wenn Sie mehr über MPT-7B oder seine größere Variante MPT-30B erfahren möchten.
Und denken Sie daran: Unabhängig davon, ob Sie mit ChatGPT oder MPT-7B arbeiten, liegt der Schlüssel darin, sicherzustellen, dass Ihr Anwendungsfall ohne Beeinträchtigung des Datenschutzes und der Kosteneffizienz abgedeckt wird. Viel Spaß beim Basteln!
Bei MindfulDataAI.com bieten wir ChatGPT für Unternehmen an. Wenn Sie daran interessiert sind, ChatGPT, MPT oder andere Modelle mit den Daten Ihres Unternehmens zu nutzen, nehmen Sie bitte Kontakt mit uns auf.