标签: huggingface-transformers

如何使用中心的数据集微调 Huggingface Seq2Seq 模型?

我想"flax-community/t5-large-wikisplit"用数据集训练模型"dxiao/requirements-ner-id"。(仅用于一些实验)

我认为我的一般程序不正确,但我不知道如何进一步。

我的代码:

加载分词器和模型:

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, AutoModel
checkpoint = "flax-community/t5-large-wikisplit"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint).cuda()
Run Code Online (Sandbox Code Playgroud)

加载我想要训练的数据集:

from datasets import load_dataset
raw_dataset = load_dataset("dxiao/requirements-ner-id")
Run Code Online (Sandbox Code Playgroud)

raw_dataset 看起来像这样 ['id', 'tokens', 'tags', 'ner_tags']

我想将句子作为句子而不是标记。

def tokenToString(tokenarray):
  string = tokenarray[0]
  for x in tokenarray[1:]:
    string += " " + x
  return string

def sentence_function(example):
  return {"sentence" :  tokenToString(example["tokens"]),
          "simplefiedSentence" : tokenToString(example["tokens"]).replace("The", "XXXXXXXXXXX")}

wikisplit_req_set = raw_dataset.map(sentence_function)
wikisplit_req_set
Run Code Online (Sandbox Code Playgroud)

我尝试重构数据集,使其看起来像 wikisplit 数据集:

simple1dataset = wikisplit_req_set.remove_columns(['id', 'tags', 'ner_tags', 'tokens']);
complexdataset = …
Run Code Online (Sandbox Code Playgroud)

python nlp huggingface-transformers huggingface-tokenizers huggingface

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

获取 RuntimeError:预期标量类型 Half 但在 opt6.7B 微调中的 AWS P3 实例中发现 Float

我有一个简单的代码,它采用 opt6.7B 模型并对其进行微调。当我在 Google colab(Tesla T4,16GB)中运行此代码时,它运行没有任何问题。但是当我尝试在 AWS p3-2xlarge 环境(Tesla V100 GPU,16GB)中运行相同的代码时,它给出了错误。

\n
RuntimeError: expected scalar type Half but found Float\n
Run Code Online (Sandbox Code Playgroud)\n

为了能够在单个 GPU 上运行微调,我使用 LORA 和 peft。在这两种情况下,安装方式完全相同(pip install)。我可以使用with torch.autocast("cuda"):,然后该错误就消失了。但是训练的损失变得非常奇怪,这意味着它不会逐渐减少,而是在很大的范围内(0-5)波动(如果我将模型更改为GPT-J,则损失始终保持为0),而损失是逐渐减少的对于 colab 来说减少。所以我不确定使用是否with torch.autocast("cuda"):是一件好事。

\n

Transfromeers 版本是4.28.0.dev0两种情况。Colab 的 Torch 版本显示1.13.1+cu116,而 p3 的 Torch 版本显示 - 1.13.1(这是否意味着它没有 CUDA 支持?我怀疑,除此之外,这样做torch.cuda.is_available()显示 True)

\n

我能看到的唯一大的区别是,对于 colab,bitsandbytes 有以下设置日志

\n
===================================BUG REPORT===================================\nWelcome to bitsandbytes. For bug reports, please submit your error trace to: https://github.com/TimDettmers/bitsandbytes/issues\n================================================================================\nCUDA_SETUP: WARNING! libcudart.so not …
Run Code Online (Sandbox Code Playgroud)

python pytorch huggingface-transformers huggingface

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

HuggingFace - 当我从检查点加载时 model.generate() 非常慢

我正在尝试使用 Donut 模型(在 HuggingFace 库中提供)使用我的自定义数据集(格式类似于 RVL-CDIP)进行文档分类。当我训练模型并model.generate()在训练循环中运行模型推理(使用方法)进行模型评估时,这是正常的(每张图像的推理大约需要0.2s)。

但是,如果训练后,我使用该方法将模型保存到检查点save_pretrained,然后使用该from_pretrained方法加载检查点,则model.generate()运行速度极慢(6s ~ 7s)。

这是我用于推理的代码(训练循环中的推理代码完全相同):

model = VisionEncoderDecoderModel.from_pretrained(CKPT_PATH, config=config)
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model.to(device)

accs = []
model.eval()
for i, sample in tqdm(enumerate(val_ds), total=len(val_ds)):
    pixel_values = sample["pixel_values"]
    pixel_values = torch.unsqueeze(pixel_values, 0)
    pixel_values = pixel_values.to(device)

    start = time.time()
    task_prompt = "<s_fci>"
    decoder_input_ids = processor.tokenizer(task_prompt, add_special_tokens=False, return_tensors="pt").input_ids
    decoder_input_ids = decoder_input_ids.to(device)
    print(f"Tokenize time: {time.time() - start:.4f}s")

    start = time.time()
    outputs = model.generate(
        pixel_values,
        decoder_input_ids=decoder_input_ids,
        max_length=model.decoder.config.max_position_embeddings,
        early_stopping=True,
        pad_token_id=processor.tokenizer.pad_token_id, …
Run Code Online (Sandbox Code Playgroud)

python pytorch huggingface-transformers

5
推荐指数
0
解决办法
1458
查看次数

进一步微调 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
查看次数

错误:file:///content 似乎不是 Python 项目:既没有找到“setup.py”也没有找到“pyproject.toml”

https://colab.research.google.com/drive/11u6leEKvqE0CCbvDHHKmCxmW5GxyjlBm?usp=sharing

setup.py 文件位于 Transformers 文件夹(根目录)中。但是当我运行时出现这个错误

!git clone https://github.com/huggingface/transformers
!cd transformers
!pip install -e .
!pip install -r transformers/examples/pytorch/translation/requirements.txt
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么会发生这种情况?

python transformer-model google-colaboratory bert-language-model huggingface-transformers

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

如何通过 HuggingFace 的文本分类管道获取模型的 logits?

我需要使用它pipeline来从数据集上的模型中获得标记化和推理distilbert-base-uncased-finetuned-sst-2-english

我的数据是一个句子列表,出于娱乐目的,我们可以假设它是:

texts = ["this is the first sentence", "of my data.", "In fact, thats not true,", "but we are going to assume it", "is"]

在使用之前pipeline,我从模型输出中获取 logits,如下所示:

with torch.no_grad():
     logits = model(**tokenized_test).logits
Run Code Online (Sandbox Code Playgroud)

现在我必须使用管道,所以这就是我获取模型输出的方式:

 selected_model = "distilbert-base-uncased-finetuned-sst-2-english"
 tokenizer = AutoTokenizer.from_pretrained(selected_model)
 model = AutoModelForSequenceClassification.from_pretrained(selected_model, num_labels=2)
 classifier = pipeline('sentiment-analysis', model=model, tokenizer=tokenizer)
 print(classifier(text))
Run Code Online (Sandbox Code Playgroud)

这给了我:

[{'label': 'POSITIVE', 'score': 0.9746173024177551}, {'label': 'NEGATIVE', 'score': 0.5020197629928589}, {'label': 'NEGATIVE', 'score': 0.9995120763778687}, {'label': 'NEGATIVE', 'score': 0.9802979826927185}, {'label': 'POSITIVE', 'score': 0.9274746775627136}]

我再也找不到“logits”字段了。

有没有办法得到 thelogits …

python sentiment-analysis huggingface-transformers huggingface large-language-model

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

`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
查看次数

HuggingFace 的 TextGeneration 和 Text2TextGeneration 管道有什么区别

我对两个 Huggingface 管道TextGenerationText2TextGeneration之间的技术差异感到困惑。

在 TextGeneration 中指出:

使用任何 ModelWithLMHead 的语言生成管道。该管道预测指定文本提示后面的单词。

但不是有语言模型可以做到这一点吗?“预测下一个单词”?那么这个管道与 Text2TextGeneration 有什么不同呢?Text2TextGeneration 不会预测下一个可能的单词吗?

我还尝试了使用“Text2TextGeneration”管道的一些模型,尽管 HuggingFace 发出警告“该模型不支持 text2text- Generation”,但它实际上有效并生成了一些输出。

如果有人可以解释技术差异,我们将不胜感激。

nlp huggingface-transformers huggingface

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

如何使 privateGPT 仅从本地文档检索信息?

我将privateGPT与默认的GPT4All模型 ( ggml-gpt4all-j-v1.3-groovy.bin ) 一起使用,但也与最新的 Falcon 版本一起使用。我的问题是,我期望仅从本地文档中获取信息,而不是从模型已经“知道”的信息中获取信息。

示例:如果唯一的本地文档是软件的参考手册,我预计 privateGPT 无法回答以下问题:“德国的首都是哪一个?” 或“什么是苹果?” 因为它的内容不在本地文档本身中。

privateGPT 使用本地 Chroma 矢量存储来存储本地文档中的嵌入。langchain检索器不应该只从这些中获取信息吗?我缺少什么?

artificial-intelligence nlp-question-answering huggingface-transformers langchain gpt4all

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

使用 Hugging Face Transformers 库微调 TheBloke/Llama-2-13B-chat-GPTQ 模型会引发 Exllama 错误

我正在尝试使用 Hugging Face Transformers 库微调 TheBloke/Llama-2-13B-chat-GPTQ 模型。我使用 JSON 文件作为训练和验证数据集。但是,当我尝试运行脚本时遇到与 Exllama 后端相关的错误。

这是我的代码:

from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from datasets import load_dataset
import torch

# Check GPU availability
print("Available GPU devices:", torch.cuda.device_count())
print("Name of the first available GPU:", torch.cuda.get_device_name(0))

# Load model and tokenizer
model_name = "TheBloke/Llama-2-13B-chat-GPTQ"

# Load tokenizer and model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# Move the model to GPU
model.to('cuda')

# Load training and validation data
train_data = load_dataset('json', data_files='train_data.jsonl')
val_data = load_dataset('json', data_files='val_data.jsonl') …
Run Code Online (Sandbox Code Playgroud)

nlp huggingface-transformers huggingface fine-tuning llama

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