Целесообразность использования Falcon/Falcoder/Llama2 LLM при попытке использовать его на экземплярах AWS EC2 Inferentia 2.8xlarge и G4dn.8xLarge.
Можно ли сделать выводы на вышеупомянутых машинах, поскольку в Inf2 с моделью Falcon мы сталкиваемся со многими проблемами?
Контекст:
Мы столкнулись с проблемами при использовании Falcon/Falcoder на машине Inf2.8xl. Нам удалось успешно провести тот же эксперимент на экземпляре G5.8xl, но мы видим, что тот же код не работает на экземпляре машины Inf2. Мы знаем, что вместо графического процессора NVIDIA используется ускоритель. Поэтому мы опробовали возможности нейронного ядра и добавили необходимый вспомогательный код для использования этой возможности с помощью библиотеки torch-neuronx. Изменения кода и соответствующие скриншоты ошибок приведены ниже для справки:
Код без использования torch-neuronx. Фрагмент кода генерации:
Трассировка стека ошибок — без использования torch-neuronx
Код с использованием torch-neuronx — фрагмент кода вспомогательной функции:
def generate_sample_inputs(tokenizer, sequence_length):
dummy_input = "dummy"
embeddings = tokenizer(dummy_input, max_length=sequence_length,
padding="max_length",return_tensors="pt")
return tuple(embeddings.values())
Трассировка стека с использованием torch-neuronx1
Трассировка стека с помощью torch-neuronx2
Может ли эта проблема с GitHub решить наши конкретные проблемы, упомянутые выше?
https://github.com/oobabooga/text-generation-webui/issues/2260
Итак, в основном мой запрос:
Возможно ли сделать вывод с помощью модели Llama 2/Falcon на экземплярах G4dn.8xLarge/ Inferentia 2.8xlarge или они еще не поддерживаются? Если нет, то какой экземпляр машины нам следует попробовать с точки зрения экономической эффективности?
**Код без использования torch-neuronx. Фрагмент кода генерации:**
generation_output = model.generate(
input_ids = input_ids,
attention_mask = attention_mask,
generation_config = generation_config,
return_dict_in_generate = True,
output_scores = False,
max_new_tokens = max_new_tokens,
early_stopping = True
)
#print("generation_output")
#print(generation_output)
s = generation_output.sequences[0]
output = tokenizer.decode(s)
**Код с использованием torch-neuronx — фрагмент кода вспомогательной функции:**
def generate_sample_inputs(tokenizer, sequence_length):
dummy_input = "dummy"
embeddings = tokenizer(dummy_input, max_length=sequence_length,
padding="max_length",return_tensors="pt")
return tuple(embeddings.values())
def compile_model_inf2(model, tokenizer, sequence_length, num_neuron_cores):
#use only one neuron core
os.environ["NEURON_RT_NUM_CORES"] = str(num_neuron_cores)
import torch_neuronx
payload = generate_sample_inputs(tokenizer, sequence_length)
return torch_neuronx.trace(model, payload)
model = compile_model_inf2(model, tokenizer, sequence_length=512, num_neuron_cores=1)
Трассировки стека ошибок уже доступны.