【tsuzumi on Snowflake】サミットにおけるNTTデータのセッション登壇レポート

# はじめに
サンフランシスコで開催された Snowflake DATA CLOUD SUMMIT 24 にて、NTT DATA Americasに出向中の渋谷から、tsuzumi on Snowflake の取り組みについて[AI245セッション](https://reg.summit.snowflake.com/flow/snowflake/summit24/sessions/page/catalog/session/1710287071968001exib)で紹介させていただきました。

■登壇の告知
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">来週のSnowflake Data Cloud Summitでセッション登壇します！NTT謹製LLM「tsuzumi」をSnowflake上で動かします。残り一週間切ったのに正直バタバタですが、来週を目いっぱい楽しむつもりです！<br>セッションシアター&amp;NTT DATAブースで僕と握手！🤝<a href="https://twitter.com/hashtag/Snowflake?src=hash&amp;ref_src=twsrc%5Etfw">#Snowflake</a> <a href="https://twitter.com/hashtag/DataSuperhero?src=hash&amp;ref_src=twsrc%5Etfw">#DataSuperhero</a><a href="https://t.co/MhuVxvCTIz">https://t.co/MhuVxvCTIz</a> <a href="https://t.co/UApdilHJ3D">pic.twitter.com/UApdilHJ3D</a></p>&mdash; Ryo Shibuya (@ryotas_data) <a href="https://twitter.com/ryotas_data/status/1795654262736789623?ref_src=twsrc%5Etfw">May 29, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

■登壇の様子
![1000009102.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/fdcac6b1-5e7a-7f14-8efe-cbdaf64117d6.jpeg)

本記事では、その登壇の様子と裏側について解説・紹介します！

:::note info
登壇開始直前は緊張のためか動きが若干硬かったのですが、発表が始まると堂々とした様子で登壇されていたことを思い出させられます！
:::

自己紹介が遅れましたが、私は、NTTデータ デザイン＆テクノロジーコンサルティング事業本部 Snowflakeビジネス推進室に所属している檜山([@toru_hiyama](https://qiita.com/toru_hiyama))と申します。登壇者である渋谷とともに、この tsuzumi on Snowflake の取り組みの主に開発部分を担当しておりました！


# tsuzumi とは？
tsuzumi とは、NTT研究所によって開発されたNTT謹製のLLMモデルです。軽量なLLMモデルですが、日本語学習データの質と量を向上させるアプローチにより、高い日本語処理能力を実現しています。

また、アダプタを付加するチューニング手法による軽量なファインチューニング（アダプタチューニング）が行えることも特徴の一つです。

さらに、tsuzumi は、軽量であるという特徴のため、様々な価値を保有します。
- セルフホストによるクローズドな環境で利用できる🔐
- 短時間でのファインチューニングによってドメイン特化型で利用できる📚
- セルフホスト・セルフチューニングのため、自身のニーズに合わせてモデルをカスタマイズし続けられる🧠
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/9470ca58-e139-983c-3643-d97aa79a98f3.png)



具体的には、下記のようなユースケースに対応することができます。
- 顧客体験：コールセンターオペレーターの支援、バーチャルコンシェルジュ、次世代の店舗体験
- 従業員体験：管理業務、ヘルスケア領域における治療合意支援
- IT運用：セキュリティ運用のサポート

例えば、顧客・従業員体験を向上させるためのコールセンターのユースケースについて紹介します。通話内容をtsuzumiにリアルタイムで入力し、マニュアルなどのドキュメントを参照することで正確な情報を得ながら、通話内容の要約文やナレッジをCRMやデータベースに登録するという仕組みが考えられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/3b849f69-1989-a6e2-3b5a-85cc97c66110.png)


NTTデータは、こうしたエンジンを、Snowflakeを通して世界中に展開することを目指します。


# tsuzumi と Snowflake
Snowflake は、非常にセキュアでプライベートな環境を提供しており、各自のデータを統合して保存しています。さらに、直近で、フルマネージドなコンテナサービス「Snowpark Container Services」の提供を開始しました。

これらのSnowflake の特徴と、tsuzumi の特徴をかけ合わせると、プライベートな環境における適応力の高い生成AIソリューションの構築に最適な環境であると言えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/4b776bbd-6a17-1350-eb7f-c4cc43909507.png)



ここで、tsuzumi は一般的なコンテナ上で動作するLLMモデルです。そのため、tsuzumi を、Snowpark Container Services 上で容易に動作させることができます。

そのアーキテクチャは下図のようになります。推論・訓練の双方でSnowpark Container Services のGPUリソース上で問題なく動作することが確認できており、これらをSQLやPython、Streamlitから操作することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/5a78b3f2-6b37-e427-c37d-0cb44e9f2280.png)

このとき重要なことは、これらのデータ・モデル・コンテナ・アプリが、すべてSnowflakeというセキュアでプライベートなクラウド環境に収まっているということです。これらのデータやモデルは、顧客の環境の外に出すことなく構築することができます。


# デモ：tsuzumi on Snowpark Container Services
デモではtsuzumiのアダプタチューニングを、下記のステップで実行します。
1. コンテナイメージの準備
1. コンピュートプールの準備
1. 訓練ジョブの実行
1. 推論サービスのセットアップ
1. 学習済みモデルによるチャット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/671a0451-14b5-8402-5642-f3c16e2f332c.png)


このデモでは、tsuzumiのアダプタチューニングにより、Snowpark for Pythonのドキュメント情報を学習させます。もちろんtsuzumiのベースモデルはSnowparkに関する情報を持っていませんが、アダプタチューニングによりtsuzumiにSnowparkの知識を与えることができます。

:::note warn

このデモは録画などではなく完全にぶっつけの実演デモのため、デモの初っ端にSnowflakeの再読み込みが走ったときは渋谷とともに、環境やデモの裏側を準備していた私もヒヤッとしました😅
:::


## 1. コンテナイメージの準備
tsuzumiは、推論用と学習用にコンテナイメージが用意されているため、これらをSnowflakeのコンテナレジストリにアップロードしておきます。

## 2. コンピュートプールの準備
tsuzumiは軽量モデルのためアダプタチューニングに必要なGPUは、コンピュートプールのGPU Mサイズで充分です。また、推論に必要なGPUは、より小さいGPU Sサイズで充分です。なお、コンピュートプールの作成や起動は下記のように非常に簡易なコマンドで行えます。
```sql
CREATE COMPUTE POOL tsuzumi_api_pool
  MIN_NODES = 1
  MAX_NODES = 1
  AUTO_RESUME = FALSE
  INITIALLY_SUSPENDED = TRUE
  AUTO_SUSPEND_SECS = 600
  INSTANCE_FAMILY = GPU_NV_S;

ALTER COMPUTE POOL tsuzumi_api_pool RESUME;
```

## 3. 訓練ジョブの実行
まず、学習用データを確認します。学習データは2000行ほどのテーブルで構成されており、これらはSnowflakeのSnowparkに関するドキュメントをチャンク化したものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/2d7baf67-d741-052e-38d6-d04a7a744fbf.png)


:::note info
機械的に収集した未整形の学習用ドキュメントテキストを、SnowflakeのCORTEX.COMPLETE関数（model: mistral-large）を用いて整形・要約しています。この前処理により、ファインチューニング後のモデル性能が向上することを確認できています。
:::


アダプタチューニングプロセスはSnowflakeのコンテナ上で実行され、およそ1時間ほどで完了します。
```sql
EXECUTE JOB SERVICE  
  IN COMPUTE POOL tsuzumi_tools_pool
  NAME=spcs_tsuzumi_job_train
  FROM SPECIFICATION $$
    // 仕様の記述（省略）
  $$;
```



## 4. 推論サービスのセットアップ
作成済みのコンピュートプールやコンテナイメージ、Specificationファイルを指定したCREATE SERVICEコマンドにより、tsuzumiの推論サービスを作成できます。
```sql
CREATE SERVICE spcs_tsuzumi_service
  IN COMPUTE POOL tsuzumi_api_pool
  FROM SPECIFICATION $$
    // 仕様の記述（省略）
  $$;
```

また、このサービスに対してサービス関数をUDFとして作成できます。
```sql
CREATE OR REPLACE FUNCTION complete_tsuzumi(
    model varchar,
    messages varchar,
    options variant default {}
) RETURNS varchar
SERVICE=spcs_tsuzumi_service
ENDPOINT=spcstsuzumiendpoint
AS '/completions';
```

このUDFは、Snowflake CORTEX LLMのCOMPLETE関数と同じように使えるよう構成しており、下記のようにtsuzumiに対してチャットを入力できます。
```sql
select complete_tsuzumi('こんにちは。お元気ですか');
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/4e78efb3-8163-51ce-0648-9a79ef2b853b.png)



もちろんUDFのため、テーブルデータを入力することもできます。



さらに、このUDFを使用したSnowflakeホスティングのStreamlitアプリを用意しており、ユーザーフレンドリーにtsuzumiと対話を行うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/b41eca25-8530-28e8-1dfe-13ebf9467bb8.png)


:::note info
ここまでの手順をご覧になっていかがでしょうか？これだけの手順で、LLMの学習や推論、そしてチャット形式のアプリケーションが構築されていることに驚くことと思います。もちろんデモのために3分クッキング式に手順を割愛している部分もありますが、それは時間的な制約によるもので、コマンド的にはほぼ上記で実現できてしまいます！
:::


## 5. 学習済みモデルとのチャット
最後に、tsuzumiのベースモデルと学習済みモデルに対して、適切に学習が行われていることを確認します。まず、ベースモデルに対して、「What is Snowpark？」と質問してみると、「Snowpark is snowball facility located in city of Hokkaido...」と誤った回答をしてしまいました。

続いて、Snowparkに関するドキュメントで学習させたモデルに対して同様の質問をしてみると、「Snowpark is library for python that allows you to write SQL query using Dataframe API...」と正しい回答を返してくれました🎉　発表時のデモでは割愛されていますが、ソースコードについてもSnowpark for Pythonのデータフレームに関する内容を回答してくれていました👩‍💻
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/41d4aa0b-1cc1-2cb3-321d-522457e3c7f1.png)


## デモのまとめ
デモで示された内容（コンテナの実行やStreamlitアプリケーションの実行）は、すべてSnowflakeのアカウント内で完結している操作です。軽量なチューニングや推論を、インタラクティブなUIで行え、それがSnowflakeの外に出ないことから、非常に便利でかつセキュアで、我々のビジネスを加速させるものだと信じています！

# 軽量モデルの価値とニーズ

軽量モデルは、比較的小さいコンピューティングリソース上で動作させられるため、カスタマイズ性に優れています。それこそ、先のデモのように、Snowpark Container ServicesのGPU SサイズやMサイズで推論・学習を実行でき、自らの学習データでLLMに特定の振る舞いを学習させることも容易にできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/3e8c3869-dbb0-76f3-c856-c0003e27d3ca.png)

軽量モデルでは、学習コストや推論コストを大幅に削減することができます。もちろんこれは、性能を犠牲にすることなく、具体的で正確なレスポンスを返すことができるものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/2e9dcbf1-d8c4-959c-f4cf-6dc6dc6eaf7c.png)

今後、FinanceやAutomobile業界で使い始められるユースケースがいくつか考えられます。我々は、今回紹介したtsuzumiを含めたLLMを開発するための様々な知識や経験を活かして、LLMアプリケーションの構築やファインチューニングなどの活動を支援いたします。


# おわりに
本セッション及び本記事では、tsuzumi自体と、Snowflakeにおけるtsuzumiの動作デモをご紹介させていただきました。今回はまず簡単なアダプタチューニングとチャットアプリケーションのご紹介でした。

最後に、会場の様子を掲載させていただきます。このように大盛況にて開催することが出来たのも、ひとえに皆様がお忙しい所、足を運んでいただけたためです。一同、大変感謝しております。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540224/61cfc66c-6feb-740c-38e6-2ce5fd96be0d.png)


こうした皆様の期待に応えられるよう、今後もNTT Global全体で取り組みを続けて参ります🚀

# 仲間募集

NTTデータ デザイン＆テクノロジーコンサルティング事業本部 では、以下の職種を募集しています。

<details><summary>1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア)</summary>

クラウド／プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer

</details>

<details><summary>2. データサイエンス領域（データサイエンティスト／データアナリスト）</summary>

データ活用／情報処理／AI／BI／統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX／デジタルサクセスを推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist

</details>

<details><summary>3.お客様のAI活用の成功を推進するAIサクセスマネージャー</summary>

DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。
https://nttdata.jposting.net/u/job.phtml?job_code=804

</details>

<details><summary>4.DX／デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》</summary>
データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=898

</details>


# ソリューション紹介

<details><summary> Trusted Data Foundationについて</summary><div>

～データ資産を分析活用するための環境をオールインワンで提供するソリューション～
https://enterprise-aiiot.nttdata.com/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ（Datalake+DWH+AI/BI）を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

</div></details>


<details><summary> TDFⓇ-AM（Trusted Data Foundation - Analytics Managed Service）について</summary><div>

～データ活用基盤の段階的な拡張支援（Quick Start) と保守運用のマネジメント（Analytics Managed）をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス～
https://enterprise-aiiot.nttdata.com/service/tdf/tdf_am
TDFⓇ-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。

</div></details>


<details><summary>NTTデータとTableauについて </summary><div>

ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。

これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。
https://enterprise-aiiot.nttdata.com/service/tableau

</div></details>


<details><summary>NTTデータとAlteryxについて </summary><div>
Alteryxは、業務ユーザーからIT部門まで誰でも使えるセルフサービス分析プラットフォームです。

Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。

導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。

https://enterprise-aiiot.nttdata.com/service/alteryx

</div></details>

<details><summary>NTTデータとDataRobotについて </summary><div>
DataRobotは、包括的なAIライフサイクルプラットフォームです。

NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。

https://enterprise-aiiot.nttdata.com/service/datarobot

</div></details>

<details><summary> NTTデータとInformaticaについて</summary><div>

データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。
https://enterprise-aiiot.nttdata.com/service/informatica

</div></details>

<details><summary>NTTデータとSnowflakeについて </summary><div>
NTTデータでは、Snowflake Inc.とソリューションパートナー契約を締結し、クラウド・データプラットフォーム「Snowflake」の導入・構築、および活用支援を開始しています。

NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Snowflakeは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。

https://enterprise-aiiot.nttdata.com/service/snowflake

</div></details>