[Großes Modell] Transformers-Bibliothek, Single-Machine-Multi-Card-Inferenzgerät_map

Die Bibliothek von Hugging Face transformersunterstützt die Modellinstanziierungsmethode des automatischen Modells (AutoModel), um Modelle wie GPT und ChatGLM automatisch zu laden und zu verwenden. Die Parameter in AutoModel.from_pretrained()der Methode device_mapkönnen eine Einzelmaschinen-Mehrkarten-Inferenz realisieren.

Analyse der Parameter „device_map“.

device_mapist AutoModel.from_pretrained()ein wichtiger Parameter in der Methode, der verwendet wird, um anzugeben, auf welches spezifische Computergerät jede Komponente des Modells geladen werden soll, um eine effektive Zuweisung und Nutzung von Ressourcen zu erreichen . Dieser Parameter ist besonders nützlich, wenn modellparalleles oder verteiltes Training durchgeführt wird.

device_mapEs gibt mehrere Optionen für Parameter auto, balanced, balanced_low_0, sequential:

  • “auto” 和 “balanced”: Das Modell wird gleichmäßig auf alle GPUs aufgeteilt. Vor allem ist es möglich, effizientere Allokationsstrategien zu entdecken. Die Funktionalität des Parameters „balanced“ bleibt stabil. (Auf Anfrage erhältlich)
  • “balanced_low_0”: Das Modell wird gleichmäßig auf andere GPUs außer der ersten GPU aufgeteilt und belegt auf der ersten GPU weniger Ressourcen. Diese Option eignet sich für Anforderungen, die zusätzliche Vorgänge auf der ersten GPU erfordern, beispielsweise die Notwendigkeit, die Generierungsfunktion (iterativer Prozess) auf der ersten GPU auszuführen. (empfohlen)
  • “sequential”: Ordnen Sie Modell-Shards in der Reihenfolge der GPU zu, beginnend bei GPU 0 bis zur letzten GPU (dann ist die letzte GPU oft nicht belegt, und der Unterschied zwischen „balanced_low_0“ ist die erste oder letzte und unausgeglichene Füllung), aber Im tatsächlichen Gebrauch führt GPU 0 direkt zum Platzen des Videospeichers. (nicht empfohlen)

device_map="auto" Codebeispiel

Hier ist unsere Umgebung eine einzelne Maschine mit zwei Grafikkarten. Verwenden Sie diese, device_map="auto"um das Modell zu laden ChatGLM-6Bund die Grafikkartennutzung zu beobachten.

Der Beispielcode lautet wie folgt:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0, 1'

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig

# 加载模型
model_path = "./model/chatglm2-6b"
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, trust_remote_code=True, device_map="auto")

text = '什么是机器学习?'
inputs = tokenizer(text, return_tensors="pt")
print(inputs)

outputs = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
  • Die Belegung der Grafikkarte vor dem Ausführen des Programms ist wie folgt:
    Fügen Sie hier eine Bildbeschreibung ein
    Sie können sehen, dass die Grafikkarte Nr. 0 selbst von anderen Programmen mit etwa 13 GB Videospeicher belegt ist.

  • device_map="auto"Die Belegungssituation der Grafikkarte nach der Verwendung ist wie folgt:
    Fügen Sie hier eine Bildbeschreibung ein
    Nach Verwendung der automatischen Richtlinie belegen die Grafikkarten 0 und 1 jeweils etwa 6 bis 7 GB mehr Videospeicher.

Manuelle Konfiguration

  • Als Einzelkarte konfigurieren
device = "cuda:1"
model = AutoModel.from_pretrained(model_path, trust_remote_code=True, device_map=device)
  • Konfigurieren für mehrere Karten
    Angenommen, Sie möchten, dass sich einige Teile des Modells auf der ersten Grafikkarte und andere Teile auf der zweiten Grafikkarte befinden. Sie müssen den Ebenennamen des Modells kennen oder ihn entsprechend der Komponentengröße angemessen zuordnen Modell. Der spezifische Ebenenname muss jedoch anhand des tatsächlichen Modells ermittelt werden. Hier ist ein konzeptionelles Beispiel:
device = {
    
    
    "transformer.h.0": "cuda:0",  # 第一部分放在GPU 0
    "transformer.h.1": "cuda:1",  # 第二部分放在GPU 1
    # ... 根据模型结构继续分配
}
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map=device)

Referenzen

Ich denke du magst

Origin blog.csdn.net/u012856866/article/details/140498484
Empfohlen
Rangfolge