Mambaを動かして速度をtransformerと比較するメモ
はじめに
話題沸騰中のMambaを動かしてみました。速度を同等サイズのtransformerと比較してみます。
関連ページ
Colabで動かす
動かした結果
基本的には、npakaさんのコードを貼り付けただけです。
無料のGPU(T4)を使いました。
実行コードの部分はこちら。
(ゆくゆく、コードの中身もチェックしたいです。)
!python -i -m benchmarks.benchmark_generation_mamba_simple \
--model-name "kotoba-tech/kotomamba-2.8B" \
--tokenizer-path "kotoba-tech/kotomamba-2.8B" \
--tokenizer-model "/root/.cache/huggingface/hub/models--kotoba-tech--kotomamba-2.8B-v1.0/snapshots/399c741bb23584bf4eb93805991c1cdb0dc0368a/tokenizer.model" \
--tokenizer-type SentencePieceTokenizer \
--use-sentencepiece \
--prompt "Q: Who is Doraemon? Gime me detailed answers. A:" \
--topp 0.9 \
--temperature 0.7 \
--repetition-penalty 1.2
実行結果
ドラえもんは誰ですか?と英語で聞いてみました。 (質問のスペルミスってます)
日本語訳
パラディソの街で暮らしている少年だそうです。誰なんですかね。
因みに、日本語で聞いた結果はこちら。
回答は間違ってますが、少しはマシになりました。
(日英の知識転移はうまくいっていないみたいですね。)
推論時間
3回の平均を取りました。
time: 4.695, speed: 37.273695420660275 tokens/sec
time: 3.301, speed: 34.53498939715238 tokens/sec
time: 3.061, speed: 36.91604050963738 tokens/sec
T4 GPUでのMambaの生成速度は、30-40 token/secでした。
transformerでのコントロール実験
phi-2(2.7b)を試す
同等サイズのtransformerモデルである、phi-2 (2.7b)の生成速度を調べました。
import time
q="Q: Who is Doraemon? Gime me detailed answers. A:"
for i in range(3):
start_time=time.time()
res=pipe(q, max_new_tokens=512)[0]["generated_text"][len(q):]
end_time=time.time()
print(res)
n_tokens=len(tokenizer.tokenize(res))
consumed_time=end_time-start_time
print(f"time consumed: {consumed_time}")
print(n_tokens/(consumed_time)," tokens/sec")
回答は以下の通り。
正解ですね。
生成速度
time consumed: 1.8966805934906006
13.180922547423055 tokens/sec
time consumed: 1.558398723602295
16.042107595039347 tokens/sec
time consumed: 1.5314698219299316
16.32418715799142 tokens/sec
今回のtransformerの場合は、平均で15 tokens/sec程度のようでした。
まとめ
tokenizerの違いなど、諸々の細かな条件を話し出すと、キリがないですが、
今回のT4 GPUでの比較では、mamba (>30 tokens/sec)がtransformer(~ 15 tokens/sec)よりも2倍以上、早いという結果になりました。
言語モデルの推論スピードは早いに越したことないので、mambaは有効な選択肢になりそうです。
補足: Scaling law的にも、mambaの学習効率は悪く無さそうです。欠点はどこにあるんでしょうか..。
この記事が気に入ったらサポートをしてみませんか?