4-битное квантование и Multi-GPU

TLDR

TII’s Falcon 180B выпущен для HuggingFace (открытый доступ для исследований и коммерческого использования, предварительно обученная модель работает лучше, чем Llama2–70b, поэтому интересно посмотреть на производительность после тонкой настройки). Для загрузки с 4-битным квантованием требуется 2 80 ГБ A100 (больше требований к оборудованию, здесь мы используем Azure Standard_NC48ads_A100_v4). Время вывода в 10+ раз медленнее, чем у llama-2–13b (производительность/стоимость могут быть проблемой при внедрении на предприятии).



Для загрузки модели требуется около 95 ГБ памяти графического процессора. Поэтому вам нужны 2 А100 по 80ГБ. Для загрузки модели, кроме библиотек pytorch, transfomers, нужны bitsandbytes, accelerate. Сначала вам необходимо дать согласие, чтобы получить доступ к модели. Ниже приведен код вывода:

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, pipeline
import torch

model_name = "tiiuae/falcon-180B-chat"

tokenizer = AutoTokenizer.from_pretrained(model_name)
# use 4bit quantization
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_use_double_quant=True,
    bnb_4bit_compute_dtype=torch.float16
)

model = AutoModelForCausalLM.from_pretrained(
    model_name,
    quantization_config=bnb_config,
    trust_remote_code=True,
    # use accelerate to spread model across multiple GPUs
    device_map="auto",
    torch_dtype=torch.float16,
)
model.config.use_cache = False

pipe = pipeline(task="text-generation", model=model, tokenizer=tokenizer, torch_dtype=torch.float16, device_map="auto")

sequences = pipe(
    'I liked "Breaking Bad" and "Band of Brothers". Do you have any recommendations of other shows I might like?\n',
    do_sample=True,
    top_k=10,
    temperature=0.5,
    num_return_sequences=1,
    top_p=0.9,
    eos_token_id=tokenizer.eos_token_id,
    max_new_tokens=50,
)
for seq in sequences:
    print(f"Result: {seq['generated_text']}")

Также сообщество квантовало модель с помощью GPTQ, например. TheBloke/Falcon-180B-Chat-GPTQ. С этой моделью вам не нужно явно использовать 4bit для ее загрузки. Однако нужны трансформеры 4.33, оптимум и установлен авто-gptq. Ниже приведен код (вы можете видеть, что нам не нужно явно использовать BitsAndBytesConfig для 4-битной версии, вывод выполняется немного быстрее, чем в приведенной выше версии):

from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline

model_name = "TheBloke/Falcon-180B-Chat-GPTQ"

# To use a different branch, change revision
# For example: revision="gptq-3bit-128g-actorder_True"
model = AutoModelForCausalLM.from_pretrained(model_name,
                                             device_map="auto",
                                             revision="main")

tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=True)

prompt = "Tell me about AI"
prompt_template=f'''User: {prompt}
Assistant: '''

pipe = pipeline(
    "text-generation",
    model=model,
    tokenizer=tokenizer,
    max_new_tokens=50,
    temperature=0.7,
    do_sample=True,
    top_p=0.95,
    repetition_penalty=1.15,
    device_map="auto"
)

print(pipe(prompt_template)[0]['generated_text'])

Приложение

Сокол 180Б



Лучшие возможности графического процессора от облачных провайдеров



Максимальный объем памяти графического процессора в Azure составляет 320 ГБ, а на AWS, GCP — 640 ГБ.