Qwen1.5-MoE: 2.7B 규모의 활성화된 매개변수로 7B 규모의 모델과 유사한 성능을 보이는 Qwen의 새로운 MoE 모델

최근 Mixtral에 의해 촉발된 관심의 물결 속에서, MoE(Mixture-of-Experts) 모델에 대한 연구가 크게 증가하고 있습니다. 이번에 소개하는 Qwen1.5-MoE-A2.7B 모델 또한 그러한 연구 결과의 일환으로, 단지 2.7B 규모의 활성화된 매개변수만을 사용하면서도 7B 모델들의 성능과 맞먹는 소규모 MoE 모델입니다.


소개

Qwen1.5-MoE-A2.7B는 2.0억 개의 비임베딩 매개변수만을 포함하여, Qwen1.5-7B 모델의 크기의 대략 삼분의 일에 해당합니다. 이 모델은 훈련 비용을 75% 감소시키고 추론 속도를 1.74배 가속화함으로써, 성능 저하 없이 자원 사용의 상당한 개선을 제공합니다.

  • 세분화된 전문가 시스템: Qwen1.5-MoE 모델은 일반적인 MoE 설정의 8배인 총 64개의 전문가를 사용합니다.

  • 모델 초기화: 기존 Qwen-1.8B 모델을 Qwen1.5-MoE-A2.7B로 변환하는 "업사이클링" 접근 방식을 사용합니다.

  • 라우팅 메커니즘: 공유 및 라우팅 전문가를 사용하여 MoE 라우팅 메커니즘을 구성합니다.

성능

Qwen1.5-MoE-A2.7B 모델 성능

Qwen1.5-MoE-A2.7B 모델은 2.7B 개의 활성화된 매개변수만을 사용함에도 불구하고, 최신 7B 모델들의 성능과 맞먹습니다. 이는 주목할 만한 성과로, 이 모델은 다양한 벤치마크 데이터셋에서 높은 성능을 보여줍니다. 예를 들어, 언어 이해, 수학, 코딩 평가를 위한 MMLU, GSM8K, HumanEval 등의 벤치마크에서 탁월한 결과를 도출했습니다. 또한, 다국어 능력을 평가하기 위해 Qwen1.5와 같은 평가 프로토콜을 따라 여러 벤치마크에서 검증했으며, MT-Bench를 사용하여 챗 모델의 성능을 평가했습니다.

비용 및 효율성

Qwen1.5-MoE-A2.7B 모델의 효율성

MoE 모델의 학습 비용은 더 많은 매개변수를 가지고 있음에도 불구하고, 희소성 때문에 학습 비용이 크게 줄어듭니다. Qwen1.5-MoE-A2.7B의 실제 구현에서는 Qwen1.5-7B와 비교하여 학습 비용이 75% 감소했습니다. 이는 "업사이클링"을 통해, 원본 모델과 동일한 양의 토큰을 학습할 필요가 없어지므로, 학습 비용을 절감하는 중요한 방법입니다.

Model Throughput TPS
Qwen1.5-7B-Chat 1.15 2298.89
Qwen1.5-MoE-A2.7B-Chat 2.01 4010.27

Qwen1.5-MoE-A2.7B 모델은 NVIDIA A100-80G GPU를 사용하여 성능을 테스트했을 때, Qwen1.5-7B 모델에 비해 약 1.74배 더 빠른 추론 속도를 보였습니다. 이러한 속도 향상은 MoE 아키텍처가 전체 매개변수의 상당히 적은 부분만을 활성화시킴으로써 계산 요구를 줄이기 때문입니다. 또한, 공유 전문가의 통합은 모델의 추론 효율성을 크게 향상시킵니다. MoE 모델이 더 많은 메모리 요구 사항을 가지고 있음에도 불구하고, 처리량과 추론 속도 측면에서 분명한 이점을 보여줍니다.

사용 방법

Qwen1.5-MoE 모델을 사용하기 위해 Hugging Face의 transformers에서 qwen2_moe 구현을 사용합니다. 최신 transformers 구현을 사용하기 위해, pip나 conda 대신 아래와 같이 최신 코드로부터 직접 설치합니다.

git clone https://github.com/huggingface/transformers
cd transformers
pip install -e .

Qwen1.5-MoE-A2.7B-Chat 모델을 사용하는 코드는 아래와 같습니다:

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-MoE-A2.7B-Chat")

prompt = "Give me a short introduction to large language model."
messages = [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt}]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

generated_ids = model.generate(model_inputs.input_ids, max_new_tokens=512)
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)

더 읽어보기

Qwen1.5-MoE 소개 글

GitHub 저장소

모델 가중치

전체 Qwen 모델들은 이곳을 참고해주세요.




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있으니 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:kr:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:gift: 아래:arrow_lower_right:쪽에 좋아요:heart:를 눌러주시면 힘이 됩니다~ :star_struck: