NVIDIA NIM を使用して Vanna のテキストから SQL の推論を高速化:より迅速な分析のための最適化手法
NVIDIA NIM を活用して Vanna のテキストから SQL への推論速度を向上させる 自然言語からのクエリ生成の遅さが意思決定を阻害し、データチームに依存せざるを得ない状況により、ビジネスユーザーやアナリストは洞察の遅れや敏捷性の欠如に陥ってしまっています。テキストから SQL への変換技術(Text-to-SQL)は、この問題を解決し、ユーザーが自然言語で構造化されたデータベースを操作できるようにします。特に業界特化型モデルでは、これが強力なツールとなり得ます。 しかし、大規模な分析ジョブでこれらのモデルを推論する際には遅延とパフォーマンスの課題が存在します。本チュートリアルでは、NVIDIA NIM を使用して Vanna の Text-to-SQL ソリューションを最適化する方法を紹介します。NVIDIA NIM は、ジェネレーティブ AI モデル向けの最適化されたエンドポイントを提供する高速推論マイクロサービスです。Vanna のオープンソース Text-to-SQL ソリューションは、柔軟性、セキュリティ、適応性で注目を集めています。 実践例:Steam ゲームデータセット Kaggle から入手可能な Steam ゲームデータセットを使用して、モデルの動作を示します。このデータセットは、ゲームのメタデータが豊富で、Analytics クエリに理想的です。 前提条件 Python 3.8 以上 NVIDIA NIM がインストールされている 必要なライブラリがインストールされている(sqlite3, pandas など) 手順 データセットのダウンロードと前処理 bash git clone https://github.com/NVIDIA/GenerativeAIExamples.git cd GenerativeAIExamples/community jupyter notebook Vanna_with_NVIDIA.ipynb 前処理手順は Kaggle の優れたノートブックを参考にしています。具体的には以下の処理を行います: - 不要なカラムの削除 - 欠損値の処理 - カテゴリとタグの分割 最終的に以下の CSV ファイルが生成されます: - games.csv: ゲーム情報 - categories.csv: ゲームカテゴリ - tags.csv: ゲームタグ Vanna の初期化と NVIDIA NIM、NeMo Retriever の統合 Vanna インスタンスを作成する際、ベクトルデータベースとの接続、埋め込み器、LLM エンドポイントが必要です。本例では、GPU 加速機能を持つ Milvus ベクトルデータベース、NVIDIA の検索モデル(llama-3.2-nv-embedqa-1b-v2)、以及 Llama 3.1 70B NIM マイクロサービスを利用しています。NVIDIA NIM は、NVIDIA AI Enterprise ライセンスに含まれており、どこでも実行できるため、独自のカスタマイゼーションや知的財産権(IP)と AI アプリケーションの完全な管理が可能になります。 SQLite データベースの作成とデータの挿入 ```python import sqlite3 import pandas as pd # SQLite データベースのパスを指定 sqlite_path = 'steam_data.db' # SQLite データベースに接続 sql_connect = sqlite3.connect(sql_connect) c = sql_connect.cursor() # テーブルの作成 init_sqls = """ CREATE TABLE IF NOT EXISTS games ( app_id INTEGER PRIMARY KEY, name TEXT, release_date TEXT, price REAL, short_description TEXT, positive INTEGER, negative INTEGER, min_owners INTEGER, max_owners INTEGER, hltb_single REAL ); CREATE TABLE IF NOT EXISTS categories ( app_id INTEGER, categories TEXT, FOREIGN KEY (app_id) REFERENCES games(app_id) ); CREATE TABLE IF NOT EXISTS tags ( app_id INTEGER, tags TEXT, tag_frequencies TEXT, FOREIGN KEY (app_id) REFERENCES games(app_id) ); """ for sql in init_sqls.split(";"): c.execute(sql) # CSV ファイルの読み込み games_df = pd.read_csv('processed_dataset/games.csv') categories_df = pd.read_csv('processed_dataset/categories.csv') tags_df = pd.read_csv('processed_dataset/tags.csv') # データベースにデータの挿入 games_df.to_sql('games', sql_connect, if_exists='append', index=False) categories_df.to_sql('categories', sql_connect, if_exists='append', index=False) tags_df.to_sql('tags', sql_connect, if_exists='append', index=False) sql_connect.commit() ``` データでの学習 Vanna は、照会されるデータとビジネス固有の用語の文脈で最適に機能します。データセットを用いてモデルを学習させることで、精度を向上させられます。 SQL クエリの生成 これで Vanna で SQL クエリを生成する準備が整いました。 結論 本チュートリアルでは、NVIDIA NIM を使用して Vanna の Text-to-SQL 推論速度を向上させる方法について説明しました。クリーンなデータベーススキーマ、実際のデータセット、および最適化された推論エンドポイントにより、ユーザーからのクエリに対してより responsively 且つ効率的な分析が実現できます。 より良い SQL 生成には、異なるトレーニング情報を追加し、モデルの精度をさらに高めることが有効です。
