Feinabstimmungspraxis des großen Modells Tongyi Qianwen Qwen-72B-Chat auf der PAI-Plattform

Tongyi Qianwen-72B (Qwen-72B) ist ein großes Sprachmodell mit einer Skala von 72 Milliarden Parametern in der von Alibaba Cloud entwickelten großen Modellreihe Tongyi Qianwen. Es wird im November 2023 offiziell als Open Source verfügbar sein. Die Vortrainingsdaten von Qwen-72B sind unterschiedlicher Art und decken ein breites Datenspektrum ab, darunter eine große Anzahl von Online-Texten, Fachbüchern, Codes usw. Qwen-72B-Chat ist ein KI-Assistent, der auf einem großen Sprachmodell basiert, das auf der Basis von Qwen-72B aufgebaut ist und einen Ausrichtungsmechanismus verwendet.

Die Alibaba Cloud Artificial Intelligence Platform PAI ist eine Plattform für maschinelles Lernen/Deep Learning für Entwickler und Unternehmen. Sie bietet Full-Link-KI-Entwicklungsdienste, einschließlich Datenanmerkung, Modellkonstruktion, Modellschulung, Modellbereitstellung und Inferenzoptimierung.

In diesem Artikel wird Qwen-72B-Chat als Beispiel verwendet, um vorzustellen, wie das große Qianwen-Modell im Schnellstart PAI-QuickStart der PAI-Plattform und im interaktiven Modellierungstool PAI-DSW effizient optimiert werden kann.

Verwenden Sie PAI-DSW, um Qwen-72B-Chat schnell zu erleben und leicht zu verfeinern

PAI-DSW ist eine cloudbasierte Entwicklungs-IDE für maschinelles Lernen, die Benutzern eine interaktive Programmierumgebung und umfangreiche Computerressourcen bietet. Das Tutorial von Qwen-72B-Chat kann in der Notebook Gallery von Zhima Lab ( https://gallery.pai-ml.com/ ) abgerufen werden , siehe Bild unten:

Das obige Notizbuch kann mit einer Instanz von Alibaba Cloud PAI-DSW geöffnet werden, und die entsprechenden Rechenressourcen und Bilder müssen ausgewählt werden.

Erleben Sie schnell Qwen-72B-Chat

Zuerst rufen wir ModelScope in DSW auf, um schnell das Qwen-72B-Chat-Modell für den Dialog zu erleben. Nach der Installation der ModelScope-bezogenen Abhängigkeiten können wir den folgenden Python-Code ausführen:

from modelscope import AutoModelForCausalLM, AutoTokenizer
from modelscope import GenerationConfig

# Note: The default behavior now has injection attack prevention off.
tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen-72B-Chat", revision='master', trust_remote_code=True)

# use bf16
# model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-72B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
# use fp16
# model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-72B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
# use cpu only
# model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-72B-Chat", device_map="cpu", trust_remote_code=True).eval()
# use auto mode, automatically select precision based on the device.
model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-72B-Chat", revision='master', device_map="auto", trust_remote_code=True).eval()

# 第一轮对话 1st dialogue turn
response, history = model.chat(tokenizer, "你好", history=None)
print(response)
# 你好!很高兴为你提供帮助。

# 第二轮对话 2nd dialogue turn
response, history = model.chat(tokenizer, "给我讲一个年轻人奋斗创业最终取得成功的故事。", history=history)
print(response)
# 这是一个关于一个年轻人奋斗创业最终取得成功的故事。
# 故事的主人公叫李明,他来自一个普通的家庭,父母都是普通的工人。从小,李明就立下了一个目标:要成为一名成功的企业家。
# 为了实现这个目标,李明勤奋学习,考上了大学。在大学期间,他积极参加各种创业比赛,获得了不少奖项。他还利用课余时间去实习,积累了宝贵的经验。
# 毕业后,李明决定开始自己的创业之路。他开始寻找投资机会,但多次都被拒绝了。然而,他并没有放弃。他继续努力,不断改进自己的创业计划,并寻找新的投资机会。
# 最终,李明成功地获得了一笔投资,开始了自己的创业之路。他成立了一家科技公司,专注于开发新型软件。在他的领导下,公司迅速发展起来,成为了一家成功的科技企业。
# 李明的成功并不是偶然的。他勤奋、坚韧、勇于冒险,不断学习和改进自己。他的成功也证明了,只要努力奋斗,任何人都有可能取得成功。

# 第三轮对话 3rd dialogue turn
response, history = model.chat(tokenizer, "给这个故事起一个标题", history=history)
print(response)
# 《奋斗创业:一个年轻人的成功之路》

Um Videospeicher zu sparen, unterstützt ModelScope auch die Verwendung von Int4/Int8-Quantisierungsmodellen:

from modelscope import AutoModelForCausalLM, AutoTokenizer
from modelscope import GenerationConfig

tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-72B-Chat-Int4", revision='master', trust_remote_code=True)

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen-72B-Chat-Int4",
    device_map="auto",
    trust_remote_code=True
).eval()
response, history = model.chat(tokenizer, "你好", history=None)

Leichte Feinabstimmung des Qwen-72B-Chat

Die beste Vorgehensweise bei der leichten Feinabstimmung Qwen-72B-Chat unterstützt den gängigsten leichten Feinabstimmungsalgorithmus LoRA und erfordert die Verwendung von Ressourcen der A800 (80 GB) 4-Karte und höher für die Berechnung. Im Folgenden beschreiben wir kurz den Algorithmusprozess zur leichten Feinabstimmung von Qwen-72B-Chat. Zuerst laden wir den Checkpoint von Qwen-72B-Chat und den für die LoRA-Feinabstimmung verwendeten Datensatz herunter. Benutzer können den Datensatz auch selbst gemäß dem oben genannten Format vorbereiten.

def aria2(url, filename, d):
    !aria2c --console-log-level=error -c -x 16 -s 16 {url} -o {filename} -d {d}

qwen72b_url = f"http://pai-vision-data-inner-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/qwen72b/Qwen-72B-Chat-sharded.tar"
aria2(qwen72b_url, qwen72b_url.split("/")[-1], "/root/")

!cd /root && tar -xvf Qwen-72B-Chat-sharded.tar
!wget -c http://pai-vision-data-inner-wulanchabu.oss-cn-wulanchabu.aliyuncs.com/qwen72b/sharegpt_zh_1K.json -P /workspace/Qwen

Im zweiten Schritt können wir die Hyperparameter des Beispielbefehls ändern und die Trainingsaufgabe starten.

! cd /workspace/Qwen && CUDA_DEVICE_MAX_CONNECTIONS=1 torchrun --nproc_per_node 8 \
--nnodes 1 \
--node_rank 0 \
--master_addr localhost \
--master_port 6001 \
finetune.py \
--model_name_or_path /root/Qwen-72B-Chat-sharded \
--data_path sharegpt_zh_1K.json \
--bf16 True \
--output_dir /root/output_qwen \
--num_train_epochs 1 \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 1000 \
--save_total_limit 1 \
--learning_rate 3e-4 \
--weight_decay 0.1 \
--adam_beta2 0.95 \
--warmup_ratio 0.01 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--report_to "none" \
--model_max_length 2048 \
--lazy_preprocess True \
--use_lora \
--gradient_checkpointing \
--deepspeed finetune/ds_config_zero3.json

Wenn das Training abgeschlossen ist, werden die LoRA-Gewichte mit dem Modellprüfpunkt zusammengeführt.

from peft import AutoPeftModelForCausalLM

model = AutoPeftModelForCausalLM.from_pretrained(
    '/root/output_qwen', # path to the output directory
    device_map="auto",
    trust_remote_code=True
).eval()
merged_model = model.merge_and_unload()
merged_model.save_pretrained('/root/qwen72b_sft', max_shard_size="2048MB", safe_serialization=True)

!cp /root/Qwen-72B-Chat-sharded/qwen.tiktoken /root/qwen72b_sft/
!cp /root/Qwen-72B-Chat-sharded/tokenization_qwen.py /root/qwen72b_sft/
!cp /root/Qwen-72B-Chat-sharded/tokenizer_config.json /root/qwen72b_sft/

Schließlich verwenden wir für die Inferenz das leichtgewichtige, fein abgestimmte Qwen-72B-Chat-Modell. Am Beispiel des Inferenz-Frameworks vllm sieht die Inferenzschnittstelle wie folgt aus:

from vllm import LLM
from vllm.sampling_params import SamplingParams

qwen72b = LLM("/root/qwen72b_sft/", tensor_parallel_size=2, trust_remote_code=True, gpu_memory_utilization=0.99)
samplingparams = SamplingParams(temperature=0.0, max_tokens=512, stop=['<|im_end|>'])
prompt = """<|im_start|>system
<|im_end|>
<|im_start|>user
<|im_end|>
Hello! What is your name?<|im_end|>
<|im_start|>assistant
"""
output = qwen72b.generate(prompt, samplingparams)
print(output)

Unter anderem muss tensor_parallel_size entsprechend der Anzahl der GPUs in der DSW-Beispielkonfiguration angepasst werden.

Verwenden Sie PAI-QuickStart, um Qwen-72B-Chat mit allen Parametern zu optimieren

Quick Start (PAI-QuickStart) ist eine PAI-Produktkomponente, die hochwertige Pre-Training-Modelle aus in- und ausländischen KI-Open-Source-Communities integriert und die Zero-Code-Implementierung der vollständigen Parameter-Feinabstimmung von Qwen-72B-Chat unterstützt. Diese vollständige Parameter-Feinabstimmungskomponente von PAI-QuickStart nutzt den intelligenten Computerdienst PAI Lingjun als zugrunde liegende Computerressource und verwendet 4 Maschinen und 32 Karten (80 GB Videospeicher pro Karte) für das Training. Die vollständige Parameter-Feinabstimmung von Qwen-72B-Chat basiert auf dem Trainingsprozess von Megatron-LM, der Datenparallelität, Operatoraufteilung, Pipeline-Parallelität, Sequenzparallelität, selektive Aktivierungsneuberechnung, Zero-Memory-Optimierung und andere Technologien unterstützt und so erhebliche Verbesserungen bringt die Verteilung großer Modelle. Trainingseffizienz. In dieser Komponente haben wir das Checkpoint-Modell im Voraus segmentiert, um es an das Training in Umgebungen mit mehreren Maschinen und Karten anzupassen. Benutzer müssen lediglich den Trainingssatz und den Überprüfungssatz entsprechend dem Format hochladen, die während des Trainings verwendeten Hyperparameter ausfüllen und Starten Sie es dann mit einem Klick. Trainingsaufgaben.

Die Modellkarte von Qwen-72B-Chat ist wie folgt:

Wir können Hyperparameter entsprechend den tatsächlichen Anforderungen anpassen, z. B. learning_rate, sequence_length, train_iters usw., wie unten gezeigt:

Klicken Sie auf die Schaltfläche „Training“. PAI-QuickStart springt automatisch zur Modelltrainingsseite und beginnt mit dem Training. Der Benutzer kann den Trainingsaufgabenstatus und das Trainingsprotokoll anzeigen, wie unten gezeigt:

Nach dem Training können Sie jedes gespeicherte Checkpoint-Modellsegment im OSS-Bucket des Ausgabepfads anzeigen, wie unten gezeigt:

Benutzer können basierend auf der tatsächlichen Situation den am besten geeigneten Prüfpunkt für die Begründung und Bereitstellung auswählen. Der spezifische Prozess kann hier gefunden werden und wird in diesem Artikel nicht im Detail beschrieben.

Autor: Xiong Xi, He Hong, Lin Zai

Ursprünglicher Link

Dieser Artikel ist Originalinhalt von Alibaba Cloud und darf nicht ohne Genehmigung reproduziert werden.

Bilibili stürzte zweimal ab, Tencents „3.29“-Unfall erster Stufe … Bestandsaufnahme der zehn häufigsten Ausfallunfälle im Jahr 2023 Vue 3.4 „Slam Dunk“ veröffentlichte MySQL 5.7, Moqu, Li Tiaotiao … Bestandsaufnahme des „Stopps“ im Jahr 2023 Mehr ” (Open-Source-)Projekte und Websites blicken auf die IDE von vor 30 Jahren zurück: nur TUI, helle Hintergrundfarbe... Vim 9.1 wird veröffentlicht, gewidmet Bram Moolenaar, dem Vater von Redis, „Rapid Review“ LLM Programming: Omniscient und Omnipotent&& Stupid „Post-Open Source“ Die Ära ist gekommen: Die Lizenz ist abgelaufen und kann nicht mehr für die breite Öffentlichkeit bereitgestellt werden. China Unicom Broadband begrenzte plötzlich die Upload-Geschwindigkeit und eine große Anzahl von Benutzern beschwerte sich. Windows-Führungskräfte versprachen Verbesserungen: Machen Sie den Anfang Speisekarte wieder super. Niklaus Wirth, der Vater von Pascal, ist verstorben.
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/yunqi/blog/10581189
Recomendado
Clasificación