标签: text-generation

进一步微调 Peft/LoRA 微调的 CausalLM 模型

我有点不确定如何继续讨论上述主题。

\n

基线是通过 Huggingface\xe2\x80\x99s 库创建的模型,作为 AutoModelForCausalLM 模型、PEFT 和 LoRA 方法,并随后合并权重。

\n

我现在想进一步微调模型而不丢失其原始属性 - 在这种情况下通过指令微调/前缀调整。

\n

我的方法如下:

\n
model = AutoModelForCausalLM.from_pretrained(\n        model_id,\n        use_cache=False if gradient_checkpointing else True\n        device_map="auto",\n        load_in_8bit=True,\n    )\n\nmodel = create_peft_config(model)\n\noutput_dir = "/tmp"\ntraining_args = TrainingArguments(\n        output_dir=output_dir,\n        overwrite_output_dir=True,\n        per_device_train_batch_size=per_device_train_batch_size,\n        per_device_eval_batch_size=per_device_train_batch_size,\n        bf16=bf16,\n        learning_rate=lr,\n        num_train_epochs=epochs,\n        gradient_checkpointing=gradient_checkpointing,\n        gradient_accumulation_steps=2,\n        logging_dir=f"{output_dir}/logs",\n        logging_strategy="steps",\n        logging_steps=10,\n        optim="adafactor",\n        save_strategy="epoch",\n        save_total_limit=3,\n        evaluation_strategy="epoch",\n        load_best_model_at_end=False,\n        no_cuda=False,\n        auto_find_batch_size=True\n)\n\ntrainer = Trainer(\n        model=model,\n        args=training_args,\n        train_dataset=dataset_train,\n        compute_metrics=compute_metrics,\n        preprocess_logits_for_metrics=preprocess_logits_for_metrics,\n        eval_dataset=dataset_eval,\n        data_collator=default_data_collator\n)\n\ntrainer.train()\n\ntrainer.model.save_pretrained(output_dir)\n\ndel model\ndel trainer\n\npeft_config = PeftConfig.from_pretrained(output_dir)\nmodel = AutoModelForCausalLM.from_pretrained(\n        peft_config.base_model_name_or_path,\n        load_in_8bit=False,\n        return_dict=True,\n        device_map="auto",\n        torch_dtype=torch.float16,\n        low_cpu_mem_usage=True,\n)\nmodel = PeftModel.from_pretrained(\n        model,\n        output_dir,\n        torch_dtype=torch.float16,\n …
Run Code Online (Sandbox Code Playgroud)

huggingface-transformers text-generation large-language-model peft

5
推荐指数
1
解决办法
4825
查看次数

`enforce_stop_tokens` 如何在 LangChain 中与 Huggingface 模型一起工作?

当我们查看 HuggingFaceHub 模型用法时,langchain有这部分作者不知道如何停止生成,https://github.com/hwchase17/langchain/blob/master/langchain/llms/huggingface_pipeline。 py#L182

\n
class HuggingFacePipeline(LLM):\n        ...\n    def _call(\n        ...\n        if stop is not None:\n            # This is a bit hacky, but I can\'t figure out a better way to enforce\n            # stop tokens when making calls to huggingface_hub.\n            text = enforce_stop_tokens(text, stop)\n        return text\n
Run Code Online (Sandbox Code Playgroud)\n

我应该使用什么来将停止标记添加到模板的末尾?

\n
\n

如果我们查看https://github.com/hwchase17/langchain/blob/master/langchain/llms/utils.py,它只是一个正则表达式分割,根据停用词列表分割输入字符串,然后取第一个分区re.split

\n
re.split("|".join(stop), text)[0]\n
Run Code Online (Sandbox Code Playgroud)\n

让我们尝试从 Huggingface 模型中获取生成输出,例如

\n
from transformers import pipeline\nfrom transformers import GPT2LMHeadModel, AutoTokenizer\n\ntokenizer = AutoTokenizer.from_pretrained(\'gpt2\')\nmodel = GPT2LMHeadModel.from_pretrained(\'gpt2\')\n\ngenerator = pipeline(\'text-generation\', …
Run Code Online (Sandbox Code Playgroud)

stop-words huggingface-transformers text-generation langchain large-language-model

5
推荐指数
1
解决办法
2715
查看次数

类似 GPT 的转换器如何仅利用解码器来进行序列生成?

我想为特定的文本生成任务编写一个类似 GPT 的转换器。类似 GPT 的模型仅使用解码器块(在堆栈中)[1]。我知道如何在 Pytorch 中编码如下所示的解码器块的所有子模块(从嵌入到 softmax 层)。但是,我不知道应该提供什么作为输入。它说(在图中)“输出右移”。

在此输入图像描述

例如,这是我的数据(其中 < 和 > 是 sos 和 eos 令牌):

  • <abcdefgh>

我应该为类似 GPT 的模型提供什么才能正确训练它?

另外,由于我没有使用编码器,我是否仍然应该向多头注意块提供输入?

抱歉,如果我的问题看起来有点愚蠢,我对变形金刚很陌生。

deep-learning pytorch gpt-2 text-generation

3
推荐指数
1
解决办法
4297
查看次数