AWS Startup ブログ

AWS Inferentia による AI 校正 Webサービスの進化。GPU から Inf1、Inf2 への移行でコスト&レイテンシーを半減

株式会社ゼンプロダクツが提供する「Shodo」は、AI が日本語の文章を校正し、誤字脱字やタイポ、二重敬語などをチェックしてくれるツールです。2024 年 8 月には生成 AI が文末を予想して補完する機能や、生成 AI に指示を出すことで文章を生成させる新機能を搭載した「Shodo Copilot」もリリースされました。

ゼンプロダクツ社は、低コストで高性能な生成 AI 推論用の Amazon EC2 Inf2 インスタンスや、その前世代の Amazon EC2 Inf1 インスタンスを有効活用してきました。なぜ、同社はこれらのインスタンスに着目したのでしょうか。そして、Amazon EC2 Inf1・Inf2 インスタンスをうまく活用するための秘訣とは。

同社の代表取締役社長である清原 弘貴 氏に、アマゾン ウェブ サービス ジャパン合同会社(以下、AWS ジャパン)スタートアップ事業本部 アカウントマネージャーの浦田 力樹とソリューションアーキテクトの岸田 晃季、AWS Annapurna Labs シニアソリューションアーキテクトの常世 大史がお話を伺いました。

文章制作の課題を解決したい思いから生まれたプロダクト

浦田:まずはゼンプロダクツ社の創業経緯をお聞きします。

清原:私はもともと、前職で社内起業をしていました。そのサービスのマーケティング活動をするために記事制作を行っていたのですが、執筆や校正の方法に悩んでいました。記事制作にかなりの時間を要しており、なんとかテクノロジーで解決したいと思っていました。

そんな折、2019 年に自然言語処理の AI である BERT が登場しました。この技術を活用して文章の校正を行ってみたところうまくいき、「このサービスを事業化できるのではないか」と考えました。そこで、ゼンプロダクツを創業して「Shodo」を作りました。

株式会社ゼンプロダクツ 代表取締役社長 清原 弘貴 氏

岸田:現在、自然言語処理の技術が世の中に普及しており文章の抽出や要約などの仕組みを導入しやすくなっているため、それらをサービスに組み込んでいるスタートアップは多いです。しかし、あくまでメインのプロダクトは別にあり、サポートのための機能として自然言語処理を導入するケースがほとんど。自然言語処理をメインで活用した事業を展開している会社は、実を言うと少ないです。

なぜなら、アウトプットの精度があまり向上しなかったり、サーバーのコストがかかり過ぎたりという課題があるためです。ゼンプロダクツ社は、そうした課題を技術力で乗り越えたうえで、事業化しているのが非常に素晴らしいと思います。

コストパフォーマンスに優れた AWS Inferentia を採用

常世:「Shodo」では Amazon EC2 Inf1・Inf2 インスタンスを有効活用されてきたそうですが、その経緯についてもお聞きできますか。

清原:私たちが BERT を用いて実施しているのは、数万文字の日本語の文章をリアルタイムで校正するという非常に重たい処理です。GPU を用いればパフォーマンスは良くなるものの、コストが高くなるためサービスとして提供することが厳しいです。コストを抑えるため CPU を選択すると、今度は推論速度が遅くなってしまいます。

そこで、深層学習 (DL) 推論アプリケーション向けにAWS が設計した AWS Inferentia アクセラレーターチップを搭載した Amazon EC2 Inf1 インスタンスは着目しました。Amazon EC2 Inf1 インスタンスはコストパフォーマンスが良く、使用料金は(当時の価格で)1 時間あたり 0.297USD と安価でした。NVIDIA T4 GPU を搭載した G4dn インスタンスと比較するとインスタンスの費用が半額以下で済みます。これなら実用化できると思い、Amazon EC2 Inf1 インスタンスを使い始めました。

その後、AWS re:Invent 2022 でより性能の良い Amazon EC2 Inf2 インスタンスの登場が発表されました。2023年4月の一般提供開始後すぐに Amazon EC2 Inf2 インスタンスに乗り換えましたね。

AWS Annapurna Labs シニアソリューションアーキテクト 常世 大史

常世:Amazon EC2 Inf2 インスタンスへの移行を、適切に行っている事例だと思います。自然言語処理の分野で使われる AI のモデルは、年々進化を遂げておりそのサイズも巨大になってきています。それに伴いハードウェアも、だんだんとスペックが足りなくなってしまいます。そのため、使用するインスタンスも定期的に刷新して性能を上げていかなくてはなりません。

Amazon EC2 Inf2 インスタンスは、第 2 世代の AWS Inferentia アクセラレータである AWS Inferentia2 を利用しています。Inf1 インスタンスと比較すると、3 倍のコンピューティングパフォーマンスと 4 倍のアクセラレータ メモリ、最大 4 倍のスループット、および最大 10分の1 の低レイテンシーです。大規模モデルを扱うために最適化されたインスタンスになっています。

Inf2 インスタンス導入によりユーザー体験が改善

浦田:Amazon EC2 Inf1 インスタンスから Amazon EC2 Inf2 インスタンスへの移行はどれくらいの期間を要しましたか。

清原:トータルでも 1 週間かからないくらいで移行が完了しましたね。両方のインスタンスでいくつか違いがあって、主にその差分対応を行いました。まずは Inf1 では Neuron コンパイラを利用したのに対して、Inf2 からは NeuronX コンパイラを使います。そのためライブラリの差し替えが必要であったこと。

そして、「Shodo」では AWS が提供する機械学習用の公式の Docker コンテナを使い、カスタムのモデルとコードを読み込ませてサービスを起動しています。この公式の Docker コンテナを Inf1 用のものから Inf2 用のものに変えるために、PyTorch や Python のバージョンをアップグレードしたこと。インスタンス変更に伴う対応としては、それくらいでした。

浦田:コンパイラやバージョンの差分対応のみで、移行はとてもスムーズだったのですね。インスタンス変更後、パフォーマンスはどれくらい改善したでしょうか。

清原:これはインスタンス変更前・変更後のモデルのレイテンシーを比較したものなのですが、もともと平均のレイテンシーが 300ms ほどだったのが 150ms ほどに下がっています。実際、インスタンス変更後にサービスの動作がスピーディーになり、ユーザー体験もかなり改善したことを覚えています。インスタンスのコストは Inf2 の方が割高なのですが、処理が高速化してスループットも向上したため、全く問題はないですね。

岸田:かなり劇的な変化ですね。記事の読者の方々に、Amazon EC2 Inf1・Inf2 インスタンスの活用方法について伝えたいことはありますか。

AWS ジャパン ソリューションアーキテクト 岸田 晃季

清原:Inf 系のインスタンスの場合、機械学習のモデルをコンパイルしたうえで動かす必要があります。そして、コンパイル時には大きく 3 つの制約があるため、これらを覚えておくことをおすすめします。

「1.モデルに渡す入力が固定長になること」「2.キーワード引数ではなく位置引数で情報を受け渡さなければならないこと」「3.小数の精度が Float32 から Float16 に変更されること」です。逆に言えば、これらのポイントさえ知っておけば Inf 系のインスタンスを使うのはそれほど難しくありません。

※初代Inferentiaはチップ内部の演算を16ビット精度で基本的に行っていましたが、Inferentia2では32ビット精度での演算にも対応し、精度と性能のトレードオフに柔軟に対応できるようになりました。

清原氏はインタビュー内で、コンパイルのサンプルコードとして以下を提示してくださいました。

dummy_input = "これはテストの文章です"
max_length = 300
encoding = tokenizer(
  dummy_input,
  max_length=max_length,
  padding="max_length",
  return_tensors="pt",
)
neuron_inputs = encoding["input_ids"], encoding["attention_mask"]

model_neuron = torch_neuronx.trace(model, neuron_inputs)

こちらのコードを実行するとコンパイルが完了します。次に、コンパイルした際の固定長をconfigに設定します。こちらは後ほど推論エンドポイントで利用されます。

model.config.update({"traced_sequence_length": max_length})

最後にモデルを保存します。こちらのコードの例では、モデル名前を neuron_model.ptに変えています。

inf_model_path = ...  # 用意したフォルダー
model_neuron.save(str(inf_model_path / "neuron_model.pt"))
tokenizer.save_pretrained(str(inf_model_path))
model.config.save_pretrained(str(inf_model_path))

そして、もうひとつ伝えたいのは、一度 Inf 系のインスタンスを使用しても、決して特定のチップにロックインされるわけではないということです。コンパイルの手法を変えれば、GPU など他のチップでも動作することができるため、いつでも変更することが可能です。そのため、安心して Amazon EC2 Inf1・Inf2 インスタンスを試してみればよいと思います。

常世: 生成AIの文脈でAWSが提供するサービスは3つの層に分けることができます。

1つ目は、基盤モデルを活用して構築されたアプリケーションで、ユーザーは専門知識がなくても迅速に生成AIを利用することができます。2つ目は Amazon Bedrock のように主に API 経由でアプリケーションを構築するためのツール、3つ目がそれらを支えるインフラ層です。ユーザーがインフラを管理する必要があるものの、ワークロードに応じてコストと性能を最適化する事が可能です。

なるべく手間をかけずプロダクト開発をクイックに始めたい場合は、Amazon Bedrock のようなサービスが適しています。一方、利用規模の拡大に伴いコスト最適が必要になった場合など、今回のゼンプロダクツ社の事例のように、より効率的なインフラ環境をご自身で構築されるお客さまもいらっしゃいます。

AWSでは、これらの異なる層のサービスを提供することで、多様な顧客ニーズに対応しています。

人間の創造性を支援するために技術を使う

AWS ジャパン スタートアップ事業本部 アカウントマネージャー 浦田 力樹

浦田:技術や事業における今後の目標はありますか。

清原:私たちは Amazon EC2 Inf2 インスタンスのノウハウをかなり蓄積できている状態なので、GPU を用いて LLM を動かしている他社と比べるとコスト面で優位に立てています。これからも多種多様な日本語 LLM を試して「Shodo」に取り入れていき、便利な機能を低コストで提供できたらと思っています。

それから、Inf2 ではなくあえて Inf1 の側を使うようなパターンも考えています。Inf1 は Inf2 よりもスペックは低いもののコストが安いので、それほど高いマシンスペックが要求されない処理は Inf1 の側に載せるという活用方法ですね。両方のインスタンスを使った経験があるからこそ、その知見を活かしていきたいです。

また事業の目標としては、より「Shodo」が支援する領域を広げていきたいと考えています。これまで、「Shodo」では主に文章の校正機能を提供してきました。そして、2024 年 8 月に正式リリースした「Shodo Copilot」では、生成 AI が文末を予想して補完する機能や、生成 AI に指示を出すことで文章を生成させる新機能を搭載しました。

私たちは、決して人間の仕事を奪うためではなく、なるべく機械に任せられる部分は機械に任せて、人間がより創造的な作業に時間を割けるように「Shodo」を開発しています。今後もさまざまな技術を積極的に活用して、文章制作における課題を解決していきたいです。