Точная настройка модели TheBloke/Llama-2-13B-chat-GPTQ с помощью библиотеки Hugging Face Transformers выдает ошибку Exllama.

Я пытаюсь настроить модель TheBloke/Llama-2-13B-chat-GPTQ, используя библиотеку Hugging Face Transformers. Я использую файл 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')

# Function to format the data
def formatting_func(example):
    return tokenizer(example['input'], example.get('output', ''), truncation=True, padding='max_length')

# Prepare training and validation data
train_data = train_data.map(formatting_func)
val_data = val_data.map(formatting_func)

# Set training arguments
training_args = TrainingArguments(
    output_dir="./output",
    overwrite_output_dir=True,
    num_train_epochs=1,
    per_device_train_batch_size=32,
    per_device_eval_batch_size=64,
    save_steps=10_000,
    save_total_limit=2,
)

# Create trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_data,
    eval_dataset=val_data,
)

# Start training
trainer.train()

# Save the model
model.save_pretrained("./output")

Я получаю следующее сообщение об ошибке:

ValueError: Найдены модули на процессоре/диске. Для использования серверной части Exllama все модули должны быть на графическом процессоре. Вы можете деактивировать серверную часть exllama, установив disable_exllama=Trueв объекте конфигурации квантования.

Я уже перенес модель на графический процессор, используя model.to('cuda'), но ошибка не устранена. Любая помощь будет принята с благодарностью.

Я попытался переместить модель в графический процессор, используя model.to('cuda') перед началом процесса обучения, как предложено в документации Hugging Face. Я также убедился, что в моей среде установлены все необходимые пакеты и зависимости. Я ожидал, что модель без проблем настроится на мой собственный набор данных JSON.

Однако, несмотря на перенос модели на графический процессор, я все равно сталкиваюсь с ошибкой серверной части Exllama. Я не уверен, почему это происходит, поскольку согласно моему коду модель должна быть на графическом процессоре. Я ищу способ устранить эту ошибку и успешно настроить модель в моем пользовательском наборе данных.

2 ответа

Судя по сообщению об ошибке, похоже, что, хотя модель могла быть перенесена в графический процессор, некоторые модули (которые могут быть частью модели или частью конвейера данных) все еще расположены в процессоре. Это несоответствие вызывает ошибку при попытке использовать серверную часть Exllama для квантования.

Вот несколько шагов, которые вы можете предпринять для устранения неполадок:

  1. Проверьте размещение устройств: убедитесь, что все компоненты, которые взаимодействуют с моделью, такие как оптимизаторы или дополнительные слои, также перемещены в графический процессор. Использоватьи просмотрите их, чтобы подтвердить местоположение своего устройства.

            for param in model.parameters():
        print(param.device)
    
  2. Конвейер данных: убедитесь, что ваши данные также загружаются в графический процессор. Например, если вы используете DataLoader, проверьте, загружаются ли данные также в графический процессор.

            for batch in dataloader:
        # Move batch to the same device as the model
        batch = {k: v.to('cuda') for k, v in batch.items()}
    
  3. Отключить Exllama: в крайнем случае вы можете отключить серверную часть Exllama, установивв вашем объекте конфигурации квантования. Это может повлиять на производительность и точность вашей модели, но должно позволить вашему коду работать без этой конкретной ошибки.

  4. Журналы и диагностика. Иногда библиотеки выводят журналы, которые могут дать вам представление о том, что именно не было перенесено в графический процессор. Возможно, вы захотите увеличить степень детализации журнала, чтобы увидеть, появляется ли какая-либо дополнительная информация.

  5. Проверка зависимостей. Убедитесь, что серверная часть Exllama не имеет дополнительных зависимостей, которые необходимо установить или настроить для правильного распознавания ресурсов графического процессора. Убедитесь, что ваш набор инструментов CUDA и библиотека cuDNN обновлены.

  6. Переменные среды. Иногда вам может потребоваться установить определенные переменные среды, чтобы гарантировать использование графического процессора. Обычно это описано в руководстве библиотеки.

  7. Обратитесь к документации или сообществу: поскольку вы упомянули Hugging Face, у них есть активный форум, на котором обсуждаются аналогичные проблемы. Возможно, вы найдете решение там.

  8. Явное перемещение подмодулей. Иногда, особенно в сложных моделях, имеющих подмодули, простойвызова может быть недостаточно. Попробуйте явно переместить каждый подмодуль в графический процессор.

  9. Версия PyTorch: убедитесь, что ваша версия PyTorch совместима с серверной частью Exllama. Иногда внутренние функции тесно связаны с конкретными версиями платформы.

Систематически проверяя каждый из этих факторов, вы сможете определить причину проблемы и принять меры для ее устранения.

Добавьте строку ниже вquantization_configчасть моделиconfig.jsonфайл:

      "quantization_config": {
    …,
    "disable_exllama": true
}
Другие вопросы по тегам