-
[AWS Bedrock] LLM 모델 성능 벤치마크 비교Programing/AWS 2024. 11. 1. 20:30반응형
현재 AWS Bedrock이 제공하는 파운데이션 모델은 굉장히 많습니다.
OpenAI의 모델들을 제외한 웬만한 주요 모델들을 다 사용할 수 있습니다.
그런데 막상 쓰려 하니 어떤 모델이 싸고 어떤 모델이 성능이 좋을지 한눈에 잘 안들어와서 정리해봤습니다.
굳이 직접 정리해본 이유
- ChatGPT나 기타 큼직큼직한 모델들의 성능비교는 이미 자료가 많음
- 그런데 Bedrock에서 제공하는 모델들에 대한 성능비교 자료는 없거나 분산되어있음
- 그나마 비교하는 것들도 성능지표가 뭉뚱그려져 있는 경우가 많거나, 논문 등에 공개된 수치와 다른 경우가 많음
- 객관적인 지표로 한눈에 비교해서 가장 합리적인 선택을 하고싶음
1. 직접 정리한 자료
- 가능한 공인되거나 각 회사가 직접 공개한 정보를 넣어보고자 했습니다.
- 출처를 찾기 어렵거나 정보를 찾기 어려운 벤치마크는 배제했습니다.
- X축(비용지표): 출력토큰 1k당 비용을 기준으로 했습니다.
- Y축(성능지표): MMLU를 기준으로 했습니다. 그나마 가장 많이 지표를 수집할 수 있었기 때문입니다.
- MMLU값을 찾지 못한 모델은 그래프에서 배제하였습니다. 수치를 모르니까 당연...
- 범례: 색상-회사 / 모양-모델
- MMLU 기준으로 가장 좋은 성능을 내는건 Cluade 3.5 Sonnet 입니다
- 하지만 가격대비 성능을 고려하면 Llama 3.2 Instruct(90B)나 Llama 3.1 Instruct(70B)가 좋아보이는군요!
Bedrock의 Llama모델이 한국어를 공식적으로 지원하지는 않는다고 하지만,
제 개인 경험으로는 Llama3.1 기준으로 어느정도 한국어로 묻고 답하는데 크게 지장이 없어 보였습니다.말투가 꽤 번역투처럼 느껴지긴 했지만, 일반 사무 관련 서비스에서 그런건 크게 문제되지 않으니까요.
다만 마케팅 등의 분야에서의 서비스 개발에는 치명적일 수도 있으니 당연히 실 테스트 비교가 필요하겠습니다.
더보기그래프 생성 코드
# pip install adjustText import matplotlib.pyplot as plt import seaborn as sns from adjustText import adjust_text import pandas as pd import numpy as np df = pd.read_excel('Bedrock모델.xlsx') df. columns = ['Company', 'Model', 'input_price', 'output_price', 'max_token', 'korean_support', 'multi_language_support', '사용사례', '설명', 'MMLU', 'GPQA', 'GSM8K', 'MATH', 'MGSM', 'HumanEval', 'DROP F1', 'BIG-bench-Hard', 'ARC-C', '출처'] df["input_price"] = df["input_price"].astype(float) df["output_price"] = df["output_price"].astype(float) # MMLU 결측치 제거 df_filtered = df.dropna(subset=['output_price', 'MMLU']) # 세팅 sns.set_style("whitegrid") plt.figure(figsize=(10, 8)) # plot 함수 def mk_scatterplot(data, title): scatter = sns.scatterplot(data=data, x='output_price', y='MMLU', hue='Company', style='Model', palette='Set2', s=100, legend=False, edgecolor='black') plt.title(title, fontsize=15) plt.xlabel('Price(per 1k token)', fontsize=12) plt.ylabel('MMLU', fontsize=12) # 그래프1: 전체 모델 plt.subplot(2, 1, 1) scatter = mk_scatterplot(df_filtered, 'Bedrock Models') texts = [plt.text(row['output_price'], row['MMLU'], row['Model'], fontsize=6) for _, row in df_filtered.iterrows()] adjust_text(texts, arrowprops=dict(arrowstyle="-", color='gray', lw=0.5)) # Claude 3 Opus 제외 df_filtered_no_claude = df_filtered[df_filtered['Model'] != 'Claude 3 Opus'] # 그래프2: Claude 3 Opus 제외 plt.subplot(2, 1, 2) scatter = mk_scatterplot(df_filtered_no_claude, 'Bedrock Models (except Claude 3 Opus)') texts_no_claude = [plt.text(row['output_price'], row['MMLU'], row['Model'], fontsize=6) for _, row in df_filtered_no_claude.iterrows()] adjust_text(texts_no_claude, arrowprops=dict(arrowstyle="-", color='gray', lw=0.5)) # plot show plt.tight_layout() plt.show()
2. 남이 정리한 자료 사이트
포스팅을 마무리할 때 쯤 이런 사이트를 이제야 발견했습니다...
- X축(속도성능)
speed = (Total Tokens - First Chunk Tokens) / (Time of Final Token Chunk Received - Time of First Token Chunk Received) - Y축(결과성능)
Currently calculated using normalized values of Chatbot Arena Elo Score, MMLU, and MT Bench
정규화 수식은 못찾겠습니다 - 동심원크기(비용)
Price = (3 * Input Price + Output Price) / 4
- X축(비용)
Price = (3 * Input Price + Output Price) / 4 - Y축(결과성능)
Currently calculated using normalized values of Chatbot Arena Elo Score, MMLU, and MT Bench
+ a. 비용을 생각할 때 추가로 고려해야 하는 것
1K, 1M 토큰당 가격이 싸다고 무조건 절대적으로 싸다고 할 수는 없습니다.
똑같은 문서라 하더라도 모델 및 임베딩모델에 따라서 토큰 개수가 달라질 수 있습니다.
여기서 모든 모델을 비교 가능한건 아니지만 간편하게 테스트 가능합니다.
물론 가장 정확한건 API로 쏘고 받아보는거겠지만요.
반응형'Programing > AWS' 카테고리의 다른 글
[AWS Bedrock] Claude3.5와 Langchain 연동하기 (24년 10월 기준) (2) 2024.10.10 [AWS Bedrock] Langchain과 Bedrock 함께쓰기 (2) 2024.03.12 [AWS Bedrock] Agents로 Bedrock 기능 구체화하기 (0) 2024.03.03 [AWS Bedrock] RAG를 위한 지식베이스 생성 (1) 2024.02.27 [AWS Bedrock] Bedrock 시작하기 (0) 2024.02.27