Quantum Large Model Fine-Tuning demo

In recent years, with the widespread adoption of large models and the gradual increase in their scale, training large-scale quantum machine learning models has led to a significant rise in training costs. To reduce the training resources required for fine-tuning large models, several fine-tuning methods have been proposed. These methods no longer fine-tune all parameters of the large model but instead train a small number of parameters through the proposed techniques, allowing the large model to achieve performance on downstream tasks that is no worse than full-parameter fine-tuning. However, fine-tuning methods based on quantum circuits have not yet gained widespread adoption.

VQNet , in combination with Llama Factory and peft , enables large model fine-tuning tasks based on quantum circuits.

Quantum Large Model Fine-Tuning Dependency Installation

Introduction to the Module: Installing Dependencies for Quantum Circuit-Based Large Model Fine-Tuning

To use quantum macromodel fine-tuning, you need the quantum-llm and pyvqnet packages, pyvqnet requires a version of 2.15.0 or above.

The first step is to install the quantum-llm library.

git clone https://gitee.com/craftsman_lei/quantum-llm.git

Afterwards, install the other dependencies and files according to the README.md file in quantum-llm.

# Download additional dependent libraries
pip install -r requirements.txt

# install peft_vqc
cd peft_vqc && pip install -e .

After installing the quantum-llm library and dependencies, install pyvqnet.

# install pyvqnet
pip install pyvqnet # pyvqnet>=2.15.0

Steps for fine-tuning training of quantum grand models

After installing the requirements package, you can refer to scripts such as train.sh under the directory /quantum-llm/examples/qlora_single_gpu/, and specify the parameters of the training base model, the selection of the fine-tuning module, and the path of the output of the fine-tuning module according to the scripts.

The Qwen2.5-0.5B model is available for download at https://huggingface.co/Qwen/Qwen2.5-0.5B?clone=true, as are the other models: Qwen2.5-0.5B If the download is not possible, you can download individual files from the URL and use them.

# Download Qwen2.5-0.5B
git clone https://huggingface.co/Qwen/Qwen2.5-0.5B

The train.sh script sample is as follows, determining the baseline model, dataset, output path and other parameter information, where model_name_or_path is put into the specified model, or if it is not accessible, it is put into the absolute path of the baseline model after downloading the baseline model by itself.

备注

Scripts such as train.sh, eval.sh, cli.sh, etc. are executed in the /quantum-llm/examples/qlora_single_gpu/ directory.

#!/bin/bash

CUDA_VISIBLE_DEVICES=1 python ../../src/train_bash.py \
    --stage sft \
    --model_name_or_path /download path/Qwen2.5-0.5B/ \
    --dataset alpaca_gpt4_en \
    --tokenized_path ../../data/tokenized/alpaca_gpt4_en/ \
    --dataset_dir ../../data \
    --template qwen \
    --finetuning_type vqc \
    --lora_target q_proj,v_proj \
    --output_dir ../../saves/Qwen2.5-0.5B/vqc/alpaca_gpt4_en \
    --overwrite_cache \
    --overwrite_output_dir \
    --cutoff_len 1024 \
    --preprocessing_num_workers 16 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 8 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --warmup_steps 20 \
    --save_steps 100 \
    --eval_steps 100 \
    --evaluation_strategy steps \
    --load_best_model_at_end \
    --learning_rate 5e-5 \
    --num_train_epochs 3.0 \
    --max_samples 1000 \
    --val_size 0.1 \
    --plot_loss \
    --fp16 \
    --do-train \

#
sh train.sh

In the quantum macromodel fine-tuning module, compared with the classical macromodel fine-tuning module, three additional fine-tuning methods are added, which are:

vqc : vqc fine-tuning module based on VQNet implementation

quanTA : module for quantum tensor decomposition

tq : vqc module based on torch quantum implementation

The above train.sh sample is a sample script for fine-tuning the vqc module, if you use the other two fine-tuning modules, change finetuning_type to quanTA , tq and plot the results of the three module experiments, the results are as follows.

../_images/peft1.png

The above figure shows the training results based on the Qwen2.5-0.5B benchmark model on the dataset alpaca_gpt4_en, in which it can be observed that the VQNet-based vqc module achieves the best loss convergence, thus proving the validity of the task of fine-tuning the large model based on the quantum lines.

The train.sh training script saves the fine-tuned module parameters to a specified directory with the --output_dir parameter. This is then evaluated by the eval.sh script in the same directory /quantum-llm/examples/qlora_single_gpu/, which reads as follows.

#!/bin/bash

CUDA_VISIBLE_DEVICES=1 python ../../src/evaluate.py \
    --model_name_or_path /download path/Qwen2.5-0.5B/ \
    --template qwen \
    --finetuning_type vqc \
    --task cmmlu \
    --task_dir ../../evaluation/ \
    --adapter_name_or_path ../../saves/Qwen2.5-0.5B/vqc/alpaca_gpt4_en \

#
sh eval.sh

Specify the baseline model path by --model_name_or_path, and load the trained module for evaluation on the relevant task according to --adapter_name_or_path, with the -task parameter describing the cmmlu, ceval, mmlu parameters.

The quiz is then executed by calling the cli_demo.py file, again based on the cli.sh script in the current directory, which reads.

#!/bin/bash

CUDA_VISIBLE_DEVICES=1 python ../../src/cli_demo.py  \
    --model_name_or_path /download path/Qwen2.5-0.5B/ \
    --template qwen \
    --finetuning_type vqc \
    --adapter_name_or_path ../../saves/Qwen2.5-0.5B/vqc/alpaca_gpt4_en \
    --max_new_tokens 1024


sh cli.sh

More specific information about the relevant parameters

PEFT Parameter Description

parameter name

Detailed introduction

stage

Determine the large model training mode, pt for pre-training, sft for fine-tuning stage, and sft for experimentation.

model_name_or_path

model_name_or_path Select the path of the baseline model.

dataset

Select dataset, such as identity, alpaca_gpt4_zh, etc.

tokenized_path

Select the dataset tokenized path.

dataset_dir

Select the dataset path.

template

model template type, e.g. llama3, etc.

finetuning_type

Specify the finetuning method, such as lora, tq, vqc, quanTA.

lora_target

The function module is q_proj, v_proj.

output_dir

The path where the fine-tuning module is stored.

overwrite_cache

Whether to overwrite the cached training and evaluation sets.

overwrite_output_dir

Whether to overwrite existing files in the output directory.

cutoff_len

Specifies the length of the cutoff when processing data.

preprocessing_num_workers

Specifies the number of work processes to be used for preprocessing the data.

per_device_train_batch_size

Batch size per gpu, training parameter

per_device_eval_batch_size

Batch size per gpu, training parameter

gradient_accumulation_steps

Number of steps for gradient accumulation, training parameter

lr_scheduler_type

learning rate scheduler, training parameter

logging_steps

Printing interval

warmup_steps

warmup steps

save_steps

model save interval

eval_steps

evaluation save interval

evaluation_strategy

Evaluation strategy, set here to step-by-step evaluation.

load_best_model_at_end

Load the best performing model at the end of training.

learning_rate

learning rate

num_train_epochs

number of training rounds to be executed

max_samples

Maximum number of training samples

val_size

Validation set size

plot_loss

whether to save the training loss curve

fp16

Whether to train with fp16 mixed precision, or float32 in the vqc module.

do-train

whether to specify a training task

adapter_name_or_path

Select the path of the file to be generated after training.

task

Select the task, currently supports ceval, cmmlu, mmlu.

task_dir

Specify the path of the task.

q_d

Specify the number of tensor decomposition of quanTA module, default is 4.

per_dim_features

Specify the number of tensor decomposition features of quanTA module, default is [16,8,4,2].