[Große Modellpraxis] ChatGLM3 Feinabstimmung des Eingabe-Ausgabe-Modells (6)

ChatGLM3 ist ein Dialog-Pre-Training-Modell der neuen Generation, das gemeinsam von Zhipu AI und dem KEG Laboratory der Tsinghua University veröffentlicht wurde. ChatGLM3-6B ist ein Open-Source-Modell der ChatGLM3-Serie. Auf der Grundlage der Beibehaltung vieler hervorragender Funktionen der beiden vorherigen Modellgenerationen, wie reibungsloser Dialog und niedriger Bereitstellungsschwellenwert, führt ChatGLM3-6B die folgenden Funktionen ein:

Leistungsstärkeres Basismodell: ChatGLM3-6B-Base, das Basismodell von ChatGLM3-6B, verwendet vielfältigere Trainingsdaten, mehr ausreichende Trainingsschritte und eine vernünftigere Trainingsstrategie. Auswertungen von Datensätzen aus verschiedenen Perspektiven wie Semantik, Mathematik, Argumentation, Code und Wissen zeigen, dass ChatGLM3-6B-Base die stärkste Leistung unter den Basismodellen unter 10B aufweist.
Umfassendere Funktionsunterstützung: ChatGLM3-6B übernimmt zusätzlich zu normalen Mehrrundengesprächen ein neu gestaltetes Prompt-Format. Gleichzeitig unterstützt es nativ komplexe Szenarien wie Toolaufrufe (Function Call), Codeausführung (Code Interpreter) und Agentenaufgaben.
Umfangreichere Open-Source-Reihe: Neben dem Dialogmodell ChatGLM3-6B sind auch das Basismodell ChatGLM3-6B-Base und das Langtext-Dialogmodell ChatGLM3-6B-32k Open Source. Alle oben genannten Rechte stehen der akademischen Forschung uneingeschränkt offen, eine kostenlose kommerzielle Nutzung ist nach Ausfüllen des Fragebogens zur Registrierung ebenfalls gestattet.

In diesem Artikel werden die Ergebnisse der Feinabstimmung von ChatGLM3-6B für den AdvertiseGen-Datensatz vorgestellt. Bitte stellen Sie sicher, dass ich die Umgebungsinstallation und den Modell-Download in [Große Modellpraxis] ChatGLM3-Installation und Erfahrung (4) abgeschlossen habe.

1. Bereiten Sie den Datensatz vor

Als Eingabe-Ausgabe-Format verwendet das Beispiel das folgende Eingabeformat:

[
  {
    "prompt": "<prompt text>",
    "response": "<response text>"
  }
  // ...
]

Während der Vorverarbeitung werden keine Rollenkennungen gespleißt.

Verwenden Sie beispielsweise den AdvertiseGen-Datensatz zur Feinabstimmung. Advertise ist ein Datensatz, der Werbung basierend auf Aufforderungswörtern generiert. Ein Teil seines Inhalts ist wie folgt:

{"content": "类型#上衣*材质#牛仔布*颜色#白色*风格#简约*图案#刺绣*衣样式#外套*衣款式#破洞",
 "summary": "简约而不简单的牛仔外套,白色的衣身十分百搭。衣身多处有做旧破洞设计,打破单调乏味,增加一丝造型看点。衣身后背处有趣味刺绣装饰,丰富层次感,彰显别样时尚。"}

Dieser Datensatz enthält zwei Dateien: train.json und dev.json:

Geben Sie das Verzeichnis „finetune_chatmodel_demo“ ein:

cd finetune_chatmodel_demo

Verwenden Sie als Nächstes das Datenverarbeitungstool von chatglm3-6b, um das Format des Datensatzes in das Chatglm3-Format zu konvertieren (ersetzen Sie den Pfad der JSON-Datei durch Ihren eigenen Trainingsdatenpfad):

python scripts/format_advertise_gen.py --path "data/advertisegen/train.json"

Nach Abschluss der Verarbeitung befindet sich in diesem Verzeichnis ein zusätzliches Verzeichnis formatted_data mit den folgenden verarbeiteten Daten:

2. P-Tuning v2 Feinabstimmung

Dieses Tutorial verwendet P-Tuning v2 zur Feinabstimmung. Ersetzen Sie den BASE_MODEL_PATH von ChatGLM3/finetune_chatmodel_demo/scripts/finetune_pt.sh durch den Pfad Ihres eigenen chatglm-6b):

#! /usr/bin/env bash

set -ex

PRE_SEQ_LEN=128
LR=2e-2
NUM_GPUS=1
MAX_SOURCE_LEN=1024
MAX_TARGET_LEN=128
DEV_BATCH_SIZE=1
GRAD_ACCUMULARION_STEPS=32
MAX_STEP=1000
SAVE_INTERVAL=500

DATESTR=`date +%Y%m%d-%H%M%S`
RUN_NAME=advertise_gen_pt

BASE_MODEL_PATH=chatglm3-6b
DATASET_PATH=formatted_data/advertise_gen.jsonl
OUTPUT_DIR=output/${RUN_NAME}-${DATESTR}-${PRE_SEQ_LEN}-${LR}

mkdir -p $OUTPUT_DIR

torchrun --standalone --nnodes=1 --nproc_per_node=$NUM_GPUS finetune.py \
    --train_format input-output \
    --train_file $DATASET_PATH \
    --preprocessing_num_workers 1 \
    --model_name_or_path $BASE_MODEL_PATH \
    --output_dir $OUTPUT_DIR \
    --max_source_length $MAX_SOURCE_LEN \
    --max_target_length $MAX_TARGET_LEN \
    --per_device_train_batch_size $DEV_BATCH_SIZE \
    --gradient_accumulation_steps $GRAD_ACCUMULARION_STEPS \
    --max_steps $MAX_STEP \
    --logging_steps 1 \
    --save_steps $SAVE_INTERVAL \
    --learning_rate $LR \
    --pre_seq_len $PRE_SEQ_LEN 2>&1 | tee ${OUTPUT_DIR}/train.log

Beginne zu trainieren:

bash scripts/finetune_pt.sh

In der Ausbildung. . . .

Der Videospeicher nimmt etwa 16 GB ein:

Ende der Ausbildung:

3. Bereitstellung

Nachdem Sie das fein abgestimmte Modell erhalten haben, kann es einfach bereitgestellt werden (MODEL_PATH wird in den Gewichtspfad Ihres eigenen chatglm3-6b geändert, PT_PATH zeigt auf den fein abgestimmten Pfad und der PT_PATH-Pfad befindet sich nach dem Training im Protokoll):

python inference.py --pt-checkpoint "output/advertise_gen_pt-20231228-043228-128-2e-2" --model chatglm3-6b 

Der Effekt ist wie folgt:

おすすめ

転載: blog.csdn.net/qq_40035462/article/details/135266253