智谱AI ChatGLM3 广告数据集 Lora微调实践

作业一 

要求:能看到 loss 的下降,并在最终回到 3.2 左右。

首先将官方代码clone到本地,

git clone https://github.com/THUDM/ChatGLM3.git

然后访问finetune_demo文件夹,按照README的要求,下载广告数据集AdvertiseGen,并进行格式转换,更适合对话形式的微调

import json
from typing import Union
from pathlib import Path


def _resolve_path(path: Union[str, Path]) -> Path:
    return Path(path).expanduser().resolve()


def _mkdir(dir_name: Union[str, Path]):
    dir_name = _resolve_path(dir_name)
    if not dir_name.is_dir():
        dir_name.mkdir(parents=True, exist_ok=False)


def convert_adgen(data_dir: Union[str, Path], save_dir: Union[str, Path]):
    def _convert(in_file: Path, out_file: Path):
        _mkdir(out_file.parent)
        with open(in_file, encoding='utf-8') as fin:
            with open(out_file, 'wt', encoding='utf-8') as fout:
                for line in fin:
                    dct = json.loads(line)
                    sample = {'conversations': [{'role': 'user', 'content': dct['content']},
                                                {'role': 'assistant', 'content': dct['summary']}]}
                    fout.write(json.dumps(sample, ensure_ascii=False) + '\n')

    data_dir = _resolve_path(data_dir)
    save_dir = _resolve_path(save_dir)

    train_file = data_dir / 'train.json'
    if train_file.is_file():
        out_file = save_dir / train_file.relative_to(data_dir)
        _convert(train_file, out_file)

    dev_file = data_dir / 'dev.json'
    if dev_file.is_file():
        out_file = save_dir / dev_file.relative_to(data_dir)
        _convert(dev_file, out_file)


convert_adgen('data/AdvertiseGen', 'data/AdvertiseGen_fix')

然后修改好对应参数,执行下列的微调代码

CUDA_VISIBLE_DEVICES=4 python finetune_hf.py  data/AdvertiseGen_fix  path_to_your_model/chatglm3-6b  configs/lora.yaml

由于访问huggingface不顺畅,于是将模型部署到本地,并制定本地模型的位置,然后运行

随着微调的进行,loss下降,达到3.2左右

作业二

要求:需要自己适配 inference.py 中的代码,并迁移到其他的推理框架中。例如,basic_demo 中没有读取微调模型后的 adapter 的内容,你需要参考 inference.py 的代码并进行修改,让其他 demo 能读入你的微调代码,将其部署到 basic_demo 下的 gradio_demo 中,并能够通过 webui 来进行调用。

即使用我们微调后的模型

主要修改模型加载方式的代码,将微调训练后的模型地址替换原来的模型地址

# MODEL_PATH = os.environ.get('MODEL_PATH', '/home/zhuoyang/chatglm3-6b')
# TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)


def _resolve_path(path: Union[str, Path]) -> Path:
    return Path(path).expanduser().resolve()


def load_model_and_tokenizer(
        model_dir: Union[str, Path], trust_remote_code: bool = True
) -> tuple[ModelType, TokenizerType]:
    model_dir = _resolve_path(model_dir)
    if (model_dir / 'adapter_config.json').exists():
        model = AutoPeftModelForCausalLM.from_pretrained(
            model_dir, trust_remote_code=trust_remote_code, device_map='auto'
        )
        tokenizer_dir = model.peft_config['default'].base_model_name_or_path
    else:
        model = AutoModelForCausalLM.from_pretrained(
            model_dir, trust_remote_code=trust_remote_code, device_map='auto'
        )
        tokenizer_dir = model_dir
    tokenizer = AutoTokenizer.from_pretrained(
        tokenizer_dir, trust_remote_code=trust_remote_code
    )
    return model, tokenizer


FTD_MODEL_PATH = "your_finetuned_path/output/checkpoint-2000"

model, tokenizer = load_model_and_tokenizer(FTD_MODEL_PATH, trust_remote_code=True)

测试一下原来的模型,未能生成广告语

而换用我们微调后的模型,可以发现生成了像样的广告语,优化效果成功

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要对 chatglm2-6b 进行微调以适应 LORA(低功耗广域网)环境,可以按照以下步骤进行操作: 1. 首先,执行 chatglm2_6b_lora.py 脚本来启动微调过程。可以使用命令行输入以下命令:`python chatglm2_6b_lora.py`。 2. 接下来,修改配置文件中的几个值。可以使用以下命令在配置文件中替换一些字符串: ``` sed -i 's/THUDM\/chatglm2-6b--//g' ./chatglm2_6b_lora/config.json sed -i 's/THUDM\/chatglm2-6b/\.\.\/chatglm2_6b_lora/g' ./chatglm2_6b_lora/config.json sed -i 's/THUDM\/chatglm2-6b--//g' ./chatglm2_6b_lora/tokenizer_config.json sed -i 's/THUDM\/ChatGLM2-6B/\.\.\/chatglm2_6b_lora/g' ./chatglm2_6b_lora/modeling_chatglm.py sed -i 's/THUDM\/chatglm2-6b/\.\.\/chatglm2_6b_lora/g' ./chatglm2_6b_lora/modeling_chatglm.py ``` 这些命令将修改配置文件中的一些路径,以使其适应 LORA 微调环境。 3. 最后,调用导出的模型进行微调。具体操作可以参考 ChatGLM-Efficient-Tuning 项目的 README 文件,首先克隆该项目的仓库,然后创建并激活一个新的 Python 环境,安装所需的依赖,并根据提供的数据集说明进行微调。可以使用以下命令执行这一步骤: ``` git clone https://github.com/hiyouga/ChatGLM-Efficient-Tuning.git conda create -n chatglm_etuning python=3.10 conda activate chatglm_etuning cd ChatGLM-Efficient-Tuning pip install -r requirements.txt ``` 然后,根据项目提供的数据集说明进行微调。 通过按照上述步骤进行操作,您可以对 chatglm2-6b 进行 LORA 微调。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [修改 ChatGLM2-6B 自我认知的 Lora 微调教程](https://blog.csdn.net/engchina/article/details/131492403)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值