ぱそきいろのIT日記

ぱそきいろがITに関する記事を書いていきます。

ChatGPTのファインチューニングにかかる費用をどうにかしたい話

こんにちは、ぱそきいろです。

以下のブログでChatGPTにファインチューニングさせる準備ができたわけですが、、
「ここから課金すればファインチューニングが始まります」で終わっています。
www.takacpu55.xyz

今回はコストの見積もりとどうするかを考えていきます。

費用の見積もり

今回はざっくりで良いので費用を見積もります。
ファインチューニングにかかる費用は公式ページを見るとgpt-3.5turboで$0.0080 / 1,000 トークンとなっています。
この辺りを見ると日本語1文字1トークンとなっているため、前回作成したデータセット内のプロンプトを抜き出して見積もります。
ChatGPTのトークンとは?トークン数を調べる方法も解説! | PROMPTY

データの抽出

以下のコードで前回作成したデータからプロンプトを抽出して費用を計算します。
文字数/1000トークン*0.008ドル*150円で費用を見積もります。

import json
import codecs
import tiktoken

def count_tokens(text):
    fulltext=""
    for t in text:
        fulltext+=t
    return len(fulltext),fulltext

doller=150
finetuning=0.008/1000

# jasonファイルを読み込む
filename="tweets_ps.jsprompt.jsonl"
content_list=[]
tweetnum=0
with codecs.open('./'+filename, 'r' , 'utf-8', 'ignore') as f:
    for line in f:
        tweetnum += 1
        line="["+line+"]"
        # JSON形式のデータを1行読み込む
        data = json.loads(line)
        content = data[0].get("messages")
        for c in content:
            ctemp=c.get("content")
            if ctemp is not None:
                content_list.append(ctemp)
# トークン数を取得
token_count,token_text = count_tokens(content_list)
print(f"ファイル内のプロンプト数: {tweetnum}")
print(f"ファイル内の概算トークン数: {token_count}")
print(f"概算金額: {token_count*finetuning*doller}円")
結果

出力結果は以下になりました。

ファイル内のプロンプト数: 3163
ファイル内の概算トークン数: 168807
概算金額: 202.56839999999997円

約200円ですが、あくまでも1エポックに掛かる金額なので、複数回エポックを回す場合や、やり直しを考慮すると少し高いように思えます。
(円高になればなるほど安くなるのですが・・・)

安くする方法として英語にしてから学習させるというのがあるようでしたが、日本語のニュアンスを崩したくない(=自然なツイートを生成させたい)のでこの手は取らないこととします。
プロンプト(学習に使うツイート)が3000超とかなり古いツイートが含まれているので直近1000ツイートくらいに絞りたいと思います。
その結果が以下です。

ファイル内のプロンプト数: 1001
ファイル内の概算トークン数: 51556
概算金額: 61.8672円

まぁ、これくらいなら許容範囲内ですかね・・・
次回こそこれでファインチューニングを試していきたいと思います。