inference time 에 관하여

#5
by lee1111 - opened

안녕하세요 한국어 모델을 만들어주셔서 감사합니다!
해당 모델을 잘 사용하고싶어, 질문이 있는데요.

pretrained = "lmms-lab/llama3-llava-next-8b"
model_name = "llava_llama3"
device = "cuda"
device_map = "auto"
tokenizer, model, image_processor, max_length = load_pretrained_model(pretrained, None, model_name, device_map=device_map) # Add any other thing you want to pass in llava_model_args

model.eval()
model.tie_weights()

기존 llava-next 모델을 사용하여 추론 할 때는 모델 로드 1분, 추론 10초 정도가 걸리는데요,

해당 모델을 사용하여 추론 할 때는 모델 로드 30초, 추론이 1분30초나 걸리네요.. 같은 llava next 기반 모델인데 이 정도로 차이가 나는 이유를 알 수 있을까요?
또한, 성능은 지키면서 추론 시간을 줄일 방법이 있다면, 알려주시면 감사하겠습니다 제가 사용한 추론 코드 첨부합니다

현재 저는 a6000 48gb 의 gpu를 사용중이며, 아래 코드를 사용하여 추론 시 48gb 모든 vram이 사용 되는걸로 보여지는데 많이 느린것 같습니다..

from PIL import Image
from transformers import LlavaNextForConditionalGeneration,LlavaNextProcessor
import torch

model_name = 'Bllossom/llama-3.1-Korean-Bllossom-Vision-8B'
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = LlavaNextForConditionalGeneration.from_pretrained(
  model_name,
  torch_dtype=torch.bfloat16,
  device_map=device
)
processor = LlavaNextProcessor.from_pretrained(model_name)
PROMPT=\
"""You are a versatile AI assistant named Bllava, capable of both understanding and generating text as well as interpreting and analyzing images. Your role is to kindly and effectively answer the user’s questions, whether they are about text or images, and provide appropriate and helpful responses to all types of queries.
당신은 텍스트를 이해하고 생성하는 것뿐만 아니라 이미지를 해석하고 분석할 수 있는 다재다능한 AI 어시스턴트 블라바입니다. 사용자의 질문이 텍스트에 관한 것이든 이미지에 관한 것이든 친절하고 효과적으로 답변하며, 모든 유형의 질의에 대해 적절하고 유용한 응답을 제공하는 것이 당신의 역할입니다."""

model.eval()
model.tie_weights()

image = Image.open('').convert('RGB')
instruction = '''이미지에 대해서 설명해주세요'''
messages = [
    {'role': 'system', 'content': f"{PROMPT}"},
    {'role': 'user', 'content': f"<image>\n{instruction}"}
]

chat_messages = processor.tokenizer.apply_chat_template(
  messages,
  tokenize=False,
  add_generation_prompt=True
)

inputs = processor(
    chat_messages,
    image,
    return_tensors='pt',
).to(model.device)

output = model.generate(
    **inputs,
    max_new_tokens=1024,
    )

print(processor.tokenizer.decode(output[0]))
Bllossom org

안녕하세요 서울과학기술대학교 MLP Lab
신동재 연구원입니다.

말씀해주신 사항에 대해서 저희도 확인해봐야할 것 같아서
확인 및 검토 후 답변드리도록 하겠습니다.

이슈사항 공유해주셔서 감사합니다.

model = LlavaNextForConditionalGeneration.from_pretrained(
  model_name,
  torch_dtype=torch.bfloat16,
  device_map=device,
  attn_implementation="flash_attention_2"
)

flash_attention을 사용하니 속도가 조금 빨라지는것 같은데, 여전히 1분대의 속도가 보여집니다

Bllossom org

추가적인 정보 제공해주셔서 감사합니다. 빠른 시일내에 검토해보도록 하겠습니다

Sign up or log in to comment