1년간의 끊임없는 노력 끝에 오늘 우리는 Qwen2-VL을 출시하게 되어 매우 기쁩니다! Qwen2-VL은 Qwen 모델 계열의 비전 언어 모델의 최신 버전입니다.
다양한 해상도 및 비율의 이미지에 대한 SoTA 이해 : Qwen2-VL은 MathVista, DocVQA, RealWorldQA, MTVQA 등을 포함한 시각적 이해 벤치마크에서 최첨단 성능을 달성합니다.
20분 이상의 동영상 이해 : Qwen2-VL은 온라인 스트리밍 기능을 통해 고품질 동영상 기반 질문 답변, 대화, 콘텐츠 제작 등을 통해 20분 이상의 동영상을 이해할 수 있습니다.
모바일, 로봇 등을 작동할 수 있는 에이전트 : 복잡한 추론 및 의사결정 능력을 갖춘 Qwen2-VL은 휴대폰, 로봇 등과 같은 장치와 통합되어 시각적 환경 및 텍스트 지침을 기반으로 자동 작동할 수 있습니다.
다국어 지원 : 영어와 중국어 외에도 Qwen2-VL은 이제 전 세계 사용자에게 서비스를 제공하기 위해 대부분의 유럽 언어, 일본어, 한국어, 아랍어, 베트남어 등을 포함하여 이미지 내의 다양한 언어로 된 텍스트에 대한 이해를 지원합니다.
순진한 동적 해상도 : 이전과 달리 Qwen2-VL은 임의의 이미지 해상도를 처리하여 이를 동적 수의 시각적 토큰으로 매핑하여 보다 인간과 유사한 시각적 처리 경험을 제공할 수 있습니다.
M-ROPE(Multimodal Rotary Position Embedding) : 위치 임베딩을 여러 부분으로 분해하여 1D 텍스트, 2D 시각적 및 3D 비디오 위치 정보를 캡처하여 다중 모드 처리 기능을 향상시킵니다.
우리는 Apache 2.0 라이선스에 따른 Qwen2-VL-2B 및 Qwen2-VL-7B와 Qwen 라이선스에 따른 Qwen2-VL-72B를 포함한 오픈 소스 Qwen2-VL 모델을 보유하고 있습니다. 이러한 모델은 이제 Hugging Face Transformers, vLLM 및 기타 타사 프레임워크와 통합되었습니다. 우리는 당신이 그것을 즐겁게 사용하기를 바랍니다!
2024.09.19: 이제 명령 조정 Qwen2-VL-72B 모델과 양자화 버전 [AWQ, GPTQ-Int4, GPTQ-Int8]을 사용할 수 있습니다. Qwen2-VL 논문도 동시에 발표했습니다.
2024.08.30 : Qwen2-VL 시리즈를 출시했습니다. 현재 2B 및 7B 모델을 사용할 수 있으며 오픈소스용 72B 모델은 곧 출시될 예정입니다. 자세한 내용은 블로그를 확인해주세요!
기준 | 이전 SoTA (오픈소스 LVLM) | 클로드-3.5 소네트 | GPT-4o | Qwen2-VL-72B (? ? | Qwen2-VL-7B (? ?) | Qwen2-VL-2B (??) |
---|---|---|---|---|---|---|
MMMU 값 | 58.3 | 68.3 | 69.1 | 64.5 | 54.1 | 41.1 |
MMMU-프로 | 46.9 | 51.5 | 51.9 | 46.2 | 43.5 | 37.6 |
DocVQA 테스트 | 94.1 | 95.2 | 92.8 | 96.5 | 94.5 | 90.1 |
InfoVQA 테스트 | 82.0 | - | - | 84.5 | 76.5 | 65.5 |
차트QA 테스트 | 88.4 | 90.8 | 85.7 | 88.3 | 83.0 | 73.5 |
TextVQA 값 | 84.4 | - | - | 85.5 | 84.3 | 79.7 |
OCR벤치 | 852 | 788 | 736 | 877 | 845 | 794 |
MTVQA | 17.3 | 25.7 | 27.8 | 30.9 | 25.6 | 18.1 |
VCR을 쉽게 | 84.67 | 63.85 | 91.55 | 91.93 | 89.70 | 81.45 |
VCR zh 쉬움 | 22.09 | 1.0 | 14.87 | 65.37 | 59.94 | 46.16 |
RealWorldQA | 72.2 | 60.1 | 75.4 | 77.8 | 70.1 | 62.9 |
MME 합계 | 2414.7 | 1920.0 | 2328.7 | 2482.7 | 2326.8 | 1872.0 |
MMBench-EN 테스트 | 86.5 | 79.7 | 83.4 | 86.5 | 83.0 | 74.9 |
MMBench-CN 테스트 | 86.3 | 80.7 | 82.1 | 86.6 | 80.5 | 73.5 |
MMBench-V1.1 테스트 | 85.5 | 78.5 | 82.2 | 85.9 | 80.7 | 72.2 |
MMT-벤치 테스트 | 63.4 | - | 65.5 | 71.7 | 63.7 | 54.5 |
엠엠스타 | 67.1 | 62.2 | 63.9 | 68.3 | 60.7 | 48.0 |
MMVet GPT-4-터보 | 65.7 | 66.0 | 69.1 | 74.0 | 62.0 | 49.5 |
홀벤치 평균 | 55.2 | 49.9 | 55.0 | 58.1 | 50.6 | 41.7 |
MathVista 테스트미니 | 67.5 | 67.7 | 63.8 | 70.5 | 58.2 | 43.0 |
매스비전 | 16.97 | - | 30.4 | 25.9 | 16.3 | 12.4 |
기준 | 이전 SoTA (오픈소스 LVLM) | 제미니 1.5-Pro | GPT-4o | Qwen2-VL-72B (? ?) | Qwen2-VL-7B (? ?) | Qwen2-VL-2B (??) |
---|---|---|---|---|---|---|
MV벤치 | 69.6 | - | - | 73.6 | 67.0 | 63.2 |
인지 테스트 테스트 | 66.9 | - | - | 68.0 | 62.3 | 53.9 |
자아스키마 테스트 | 62.0 | 63.2 | 72.2 | 77.9 | 66.7 | 54.9 |
비디오-MME (구독자 수/수) | 66.3/69.6 | 75.0 / 81.3 | 71.9/77.2 | 71.2/77.8 | 63.3/69.0 | 55.6/60.4 |
기준 | 미터법 | 이전 SoTA | GPT-4o | Qwen2-VL-72B | |
---|---|---|---|---|---|
일반적인 | Fn콜 [1] | TM | - | 90.2 | 93.1 |
여자 이름 | - | 50.0 | 53.2 | ||
게임 | 수직선 | SR | 89.4 [2] | 91.5 | 100.0 |
곤봉 | SR | 40.2 [2] | 34.5 | 42.6 | |
EZ포인트 | SR | 50.0 [2] | 85.5 | 100.0 | |
포인트24 | SR | 2.6 [2] | 3.0 | 4.5 | |
기계적 인조 인간 | 아이츠 | TM | 83.0 [3] | 70.0 | 89.6 |
여자 이름 | 47.7 [3] | 35.3 | 72.1 | ||
AI2THOR | ALFRED 유효-보이지 않음 | SR | 67.7 [4] | - | 67.8 |
GC | 75.3 [4] | - | 75.8 | ||
VLN | R2R 유효-보이지 않음 | SR | 79.0 | 43.7 [5] | 51.7 |
REVERIE 유효-보이지 않음 | SR | 61.0 | 31.6 [5] | 31.0 |
SR, GC, TM 및 EM은 성공률, 목표 조건 성공, 유형 일치 및 완전 일치의 약자입니다. ALFRED는 SAM [6] 에서 지원됩니다.
Qwen 팀의 자체 선별 함수 호출 벤치마크
강화 학습을 통해 의사 결정 에이전트로서 대형 비전 언어 모델 미세 조정
동물원 속의 Android: GUI 에이전트를 위한 일련의 사고
ThinkBot: 사고 연쇄 추론을 따르는 구체화된 지시
MapGPT: 비전 및 언어 탐색을 위한 적응형 경로 계획을 사용한 지도 기반 프롬프트
무엇이든 분류하세요.
모델 | 아칸소 | 드 | 정말로 | 그것 | 일본 | KO | 러시아 | 일 | VI | 평균 |
---|---|---|---|---|---|---|---|---|---|---|
Qwen2-VL-72B | 20.7 | 36.5 | 44.1 | 42.8 | 21.6 | 37.4 | 15.6 | 17.7 | 41.6 | 30.9 |
GPT-4o | 20.2 | 34.2 | 41.2 | 32.7 | 20.0 | 33.9 | 11.5 | 22.5 | 34.2 | 27.8 |
클로드3 오푸스 | 15.1 | 33.4 | 40.6 | 34.4 | 19.4 | 27.2 | 13.0 | 19.5 | 29.1 | 25.7 |
제미니 울트라 | 14.7 | 32.3 | 40.0 | 31.8 | 12.3 | 17.2 | 11.8 | 20.3 | 28.6 | 23.2 |
이러한 결과는 MTVQA 벤치마크에서 평가되었습니다.
아래에서는 Qwen2-VL을 ?와 함께 사용하는 방법을 보여주는 간단한 예를 제공합니다. ModelScope 및? 트랜스포머.
Qwen2-VL의 코드는 최신 Hugging 얼굴 변환기에 포함되어 있으며 다음 명령을 사용하여 소스에서 빌드하는 것이 좋습니다.
pip install git+https://github.com/huggingface/transformers@21fac7abba2a37fae86106f87fcf9974fd1e3830 accelerate
또는 다음 오류가 발생할 수 있습니다.
KeyError: 'qwen2_vl'
참고 : 현재 최신 버전의 transformers
Qwen2-VL 구성을 로드할 때 버그가 있으므로 위와 같이 특정 버전의 변환기를 설치해야 합니다.
다양한 유형의 시각적 입력을 마치 API를 사용하는 것처럼 보다 편리하게 처리할 수 있도록 툴킷을 제공합니다. 여기에는 base64, URL, 인터리브된 이미지와 비디오가 포함됩니다. 다음 명령을 사용하여 설치할 수 있습니다.
# 더 빠른 비디오 로딩을 위해 `[장식]` 기능을 사용하는 것이 좋습니다.pip install qwen-vl-utils[장식]
Linux를 사용하지 않는 경우 PyPI에서 decord
설치하지 못할 수도 있습니다. 이 경우 pip install qwen-vl-utils
사용하면 비디오 처리에 torchvision을 사용하게 됩니다. 그러나 소스에서 decod를 설치하여 비디오를 로드할 때 decod를 사용할 수 있습니다.
여기서는 transformers
및 qwen_vl_utils
와 함께 채팅 모델을 사용하는 방법을 보여주는 코드 조각을 보여줍니다.
from Transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessorfrom qwen_vl_utils import process_vision_info# 기본값: 사용 가능한 장치에 모델 로드model = Qwen2VLForConditionalGeneration.from_pretrained("Qwen/Qwen2-VL-7B-Instruct", torch_dtype="auto", device_map= "auto")# 다음에 대해 flash_attention_2를 활성화하는 것이 좋습니다. 특히 다중 이미지 및 비디오 시나리오에서 향상된 가속 및 메모리 절약.# model = Qwen2VLForConditionalGeneration.from_pretrained(# "Qwen/Qwen2-VL-7B-Instruct",# torch_dtype=torch.bfloat16,# attn_implementation="flash_attention_2",# device_map="auto",# )# 기본 프로세서processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct")# 모델의 이미지당 시각적 토큰 수의 기본 범위는 4-16384입니다.# 다음과 같이 필요에 따라 min_pixels 및 max_pixels를 설정할 수 있습니다. 성능과 비용의 균형을 맞추기 위해 256-1280의 토큰 범위.# min_pixels = 256*28*28# max_pixels = 1280*28*28# 프로세서 = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)messages = [ {"역할": "사용자","콘텐츠": [ {"유형": "이미지","이미지": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg", }, {"type": "text", "text": "이 이미지에 대해 설명하세요."}, ], } ]# 추론 준비text = processor.apply_chat_template(messages, tokenize=False, add_세대_prompt=True)image_inputs, video_inputs = process_vision_info(messages)inputs = processor(text=[text],images=image_inputs,videos=video_inputs,padding=True, return_tensors="pt", )inputs = inputs.to("cuda")# 추론: 출력 생성generated_ids = model.generate(**inputs, max_new_tokens=128)generated_ids_trimmed = [out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs .input_ids, 생성된_ids) ]output_text = processor.batch_decode(generated_ids_trimmed, Skip_special_tokens=True, clean_up_tokenization_spaces=False)print(output_text)
# 여러 이미지와 텍스트 쿼리가 포함된 메시지messages = [ {"역할": "사용자","콘텐츠": [ {"유형": "이미지", "이미지": "file:///path/to/image1.jpg"}, {"유형": "이미지", "이미지": "file:///path/to/image2.jpg"}, {"type": "text", "text": "이 이미지들 사이의 유사점을 식별하세요."}, ], } ]# 추론 준비text = processor.apply_chat_template(messages, tokenize=False, add_세대_prompt=True)image_inputs, video_inputs = process_vision_info(messages)inputs = processor(text=[text],images=image_inputs,videos=video_inputs,padding=True, return_tensors="pt", )inputs = inputs.to("cuda")# Inferencegenerated_ids = model.generate(**inputs, max_new_tokens=128)generated_ids_trimmed = [out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generate_ids) ]output_text = processor.batch_decode(generated_ids_trimmed, Skip_special_tokens=True, clean_up_tokenization_spaces=False)print(output_text)
# 이미지 목록을 동영상과 텍스트로 포함하는 메시지 쿼리messages = [ {"역할": "사용자","콘텐츠": [ {"유형": "비디오","비디오": ["file:///path/to/frame1.jpg","file:///path/to/frame2.jpg","file:/// 경로/to/frame3.jpg","file:///path/to/frame4.jpg", ], }, {"type": "text", "text": "이 동영상에 대해 설명하세요."}, ], } ]# 로컬 비디오 경로와 텍스트 쿼리가 포함된 메시지messages = [ {"역할": "사용자","콘텐츠": [ {"유형": "비디오","비디오": "file:///path/to/video1.mp4","max_pixels": 360 * 420,"fps": 1.0, }, {"type": "text", "text": "이 동영상에 대해 설명하세요."}, ], } ]# 동영상 URL과 텍스트 쿼리가 포함된 메시지messages = [ {"역할": "사용자","콘텐츠": [ {"유형": "비디오","비디오": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-VL/space_woaudio.mp4", }, {"type": "text", "text": "이 동영상에 대해 설명하세요."}, ], } ]# 추론 준비text = processor.apply_chat_template(messages, tokenize=False, add_세대_prompt=True)image_inputs, video_inputs = process_vision_info(messages)inputs = processor(text=[text],images=image_inputs,videos=video_inputs,padding=True, return_tensors="pt", )inputs = inputs.to("cuda")# Inferencegenerated_ids = model.generate(**inputs, max_new_tokens=128)generated_ids_trimmed = [out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generate_ids) ]output_text = processor.batch_decode(generated_ids_trimmed, Skip_special_tokens=True, clean_up_tokenization_spaces=False)print(output_text)
비디오 URL 호환성은 주로 타사 라이브러리 버전에 따라 다릅니다. 자세한 내용은 아래 표에 나와 있습니다. 기본 백엔드를 사용하지 않으려면 FORCE_QWENVL_VIDEO_READER=torchvision
또는 FORCE_QWENVL_VIDEO_READER=decord
로 백엔드를 변경하세요.
백엔드 | HTTP | HTTPS |
---|---|---|
토치비전 >= 0.19.0 | ✅ | ✅ |
토치비전 < 0.19.0 | ❌ | ❌ |
장식하다 | ✅ | ❌ |
# 일괄 추론을 위한 샘플 메시지messages1 = [ {"역할": "사용자","콘텐츠": [ {"유형": "이미지", "이미지": "file:///path/to/image1.jpg"}, {"유형": "이미지", "이미지": "file:///path/to/image2.jpg"}, {"type": "text", "text": "이 그림의 공통 요소는 무엇입니까?"}, ], } ]메시지2 = [ {"role": "system", "content": "당신은 도움이 되는 조수입니다."}, {"role": "사용자", "content": "당신은 누구입니까?"}, ]# 일괄 처리를 위한 메시지 결합messages = [messages1, message2]# 일괄 추론 준비 texts = [processor.apply_chat_template(msg, tokenize=False, add_ Generation_prompt=True)for msg in message]image_inputs, video_inputs = process_vision_info(messages)inputs = 프로세서(텍스트=텍스트,이미지=image_inputs,videos=video_inputs,padding=True,return_tensors="pt", )inputs = inputs.to("cuda")# 일괄 추론generated_ids = model.generate(**inputs, max_new_tokens=128)generated_ids_trimmed = [out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generate_ids) ) ]output_texts = processor.batch_decode(generated_ids_trimmed, Skip_special_tokens=True, clean_up_tokenization_spaces=False)print(output_texts)
특히 중국 본토 사용자에게는 ModelScope를 사용할 것을 강력히 권장합니다. snapshot_download
체크포인트 다운로드와 관련된 문제를 해결하는 데 도움이 될 수 있습니다.
입력 이미지의 경우 로컬 파일, base64 및 URL을 지원합니다. 비디오의 경우 현재 로컬 파일만 지원됩니다.
# 텍스트 내 원하는 위치에 로컬 파일 경로, URL, Base64 인코딩 이미지 등을 직접 삽입할 수 있습니다.## 로컬 파일 경로 메시지 = [ {"역할": "사용자","콘텐츠": [ {"유형": "이미지", "이미지": "file:///path/to/your/image.jpg"}, {"type": "text", "text": "이 이미지에 대해 설명하세요."}, ], } ]## 이미지 URL 메시지 = [ {"역할": "사용자","콘텐츠": [ {"유형": "이미지", "이미지": "http://path/to/your/image.jpg"}, {"type": "text", "text": "이 이미지에 대해 설명하세요."}, ], } ]## Base64로 인코딩된 이미지 메시지 = [ {"역할": "사용자","콘텐츠": [ {"유형": "이미지", "이미지": "데이터:이미지;base64,/9j/..."}, {"type": "text", "text": "이 이미지에 대해 설명하세요."}, ], } ]
이 모델은 광범위한 해상도 입력을 지원합니다. 기본적으로 입력에 기본 해상도를 사용하지만 해상도가 높을수록 더 많은 계산 비용으로 성능이 향상될 수 있습니다. 사용자는 속도와 메모리 사용량의 균형을 맞추기 위해 256-1280의 토큰 수 범위와 같이 필요에 맞는 최적의 구성을 달성하기 위해 최소 및 최대 픽셀 수를 설정할 수 있습니다.
min_pixels = 256 * 28 * 28max_pixels = 1280 * 28 * 28processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)
게다가 모델에 입력되는 이미지 크기를 세밀하게 제어할 수 있는 두 가지 방법을 제공합니다.
정확한 크기 지정: resized_height
및 resized_width
직접 설정하세요. 이 값은 가장 가까운 28의 배수로 반올림됩니다.
min_pixels 및 max_pixels 정의: min_pixels 및 max_pixels 범위 내에서 가로 세로 비율을 유지하기 위해 이미지 크기가 조정됩니다.
# resize_height 및 resize_widthmessages = [ {"역할": "사용자","콘텐츠": [ {"유형": "이미지","이미지": "file:///path/to/your/image.jpg","resize_height": 280,"resize_width": 420, }, {"type": "text", "text": "이 이미지에 대해 설명하세요."}, ], } ]# min_pixels 및 max_pixelsmessages = [ {"역할": "사용자","콘텐츠": [ {"유형": "이미지","이미지": "file:///path/to/your/image.jpg","min_pixels": 50176,"max_pixels": 50176, }, {"type": "text", "text": "이 이미지에 대해 설명하세요."}, ], } ]
기본적으로 이미지와 비디오 콘텐츠는 대화에 직접 포함됩니다. 여러 이미지를 처리할 때 더 나은 참조를 위해 이미지와 비디오에 라벨을 추가하는 것이 도움이 됩니다. 사용자는 다음 설정을 사용하여 이 동작을 제어할 수 있습니다.
대화 = [ {"role": "user","content": [{"type": "image"}, {"type": "text", "text": "안녕하세요, 잘 지내세요?"}], }, {"role": "도우미","content": "저는 잘 지내고 있습니다. 물어봐주셔서 감사합니다. 오늘은 어떻게 도와드릴까요?", }, {"역할": "사용자","콘텐츠": [ {"type": "text", "text": "이 이미지와 비디오를 설명할 수 있습니까?"}, {"유형": "이미지"}, {"유형": "이미지"}, {"유형": "동영상"}, {"type": "text", "text": "이것들은 내 휴가에서 가져온 것입니다."}, ], }, {"role": "도우미","content": "이미지와 동영상에 대해 기꺼이 설명해 드리겠습니다. 휴가에 대한 자세한 내용을 제공해 주실 수 있나요?", }, {"role": "user","content": "산으로의 여행이었습니다. 이미지와 영상에서 자세한 내용을 보실 수 있나요?", }, ]# default:prompt_without_id = processor.apply_chat_template(conversation, add_ Generation_prompt=True)# 예외 출력: '<|im_start|>systemn당신은 유용한 보조자입니다.<|im_end|>n<|im_start|>usern<|vision_start|>< |image_pad|><|vision_end|>안녕하세요. 잘 지내시나요? 당신은?<|im_end|>n<|im_start|>도우미n저는 잘 지내고 있습니다. 물어봐주셔서 감사합니다. 오늘은 어떻게 도와드릴까요?<|im_end|>n<|im_start|>usern이 이미지와 비디오에 대해 설명해주실 수 있나요?<|vision_start|><|image_pad|><|vision_end|><|vision_start|><|image_pad| ><|vision_end|><|vision_start|><|video_pad|><|vision_end|>이것들은 내 영상에서 가져온 것입니다 vacation.<|im_end|>n<|im_start|>assistantn이미지와 비디오에 대해 기꺼이 설명해 드리겠습니다. 휴가에 대한 자세한 내용을 제공해 주실 수 있나요?<|im_end|>n<|im_start|>usern산으로의 여행이었습니다. 이미지와 동영상의 세부정보를 볼 수 있나요?<|im_end|>n<|im_start|>assistantn'# add idsprompt_with_id = processor.apply_chat_template(conversation, add_ Generation_prompt=True, add_vision_id=True)# 예외 출력: '<|im_start |>systemn당신은 도움이 되는 조수입니다.<|im_end|>n<|im_start|>usernPicture 1: <|vision_start|><|image_pad|><|vision_end|>안녕하세요, 잘 지내세요?<|im_end|>n<|im_start|>assistantn잘 지내고 있습니다. 물어봐주셔서 감사합니다. 오늘은 어떻게 도와드릴까요?<|im_end|>n<|im_start|>usern이 이미지와 비디오에 대해 설명해주실 수 있나요?그림 2: <|vision_start|><|image_pad|><|vision_end|>그림 3: <|vision_start |><|image_pad|><|vision_end|>비디오 1: <|vision_start|><|video_pad|><|vision_end|>이것은 내 동영상에서 가져온 것입니다. vacation.<|im_end|>n<|im_start|>assistantn이미지와 비디오에 대해 기꺼이 설명해 드리겠습니다. 휴가에 대한 자세한 내용을 제공해 주실 수 있나요?<|im_end|>n<|im_start|>usern산으로의 여행이었습니다. 이미지와 동영상에서 자세한 내용을 볼 수 있나요?<|im_end|>n<|im_start|>assistantn'
먼저 최신 버전의 Flash Attention 2를 설치해야 합니다.
pip install -U flash-attn --no-build-isolation
또한 Flash-Attention 2와 호환되는 하드웨어가 있어야 합니다. 이에 대한 자세한 내용은 Flash Attention 저장소의 공식 문서를 참조하세요. FlashAttention-2는 모델이 torch.float16
또는 torch.bfloat16
에 로드된 경우에만 사용할 수 있습니다.
Flash Attention-2를 사용하여 모델을 로드하고 실행하려면 다음과 같이 모델을 로드할 때 attn_implementation="flash_attention_2"
추가하면 됩니다.
변환기에서 import Qwen2VLForConditionalGenerationmodel =