Slide 1

Slide 1 text

NVIDIA NIMによるモデルのサービングと NVIDIA NeMo Guardrailsによる安全性の担保 1時間で理解するッ!!NVIDIA NIMやNVIDIA NeMoの基礎と実用例 株式会社スリーシェイク Sreake事業部  赤川 大空 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 2

Slide 2 text

自己紹介 - 赤川大空(Akasan) - 株式会社スリーシェイク Sreake事業部 アプリチームの中で、特にML領域を担当 - MLOpsの構築支援など - 社内のNVIDIA Inceptionパートナー としての活動をリード

Slide 3

Slide 3 text

目次 1. NVIDIA NIMでモデルをサービングしてみよう 2. garakによるモデルの脆弱性スキャン 3. NeMo Guardrailsによる脆弱性対策

Slide 4

Slide 4 text

NVIDIA NIMでモデルをサービングしてみよう 01 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 5

Slide 5 text

モデルを自前でサービングするときに悩むこと… どのGPUインスタンス 使えばいいんだ モデルを簡単に試した いけどデプロイ ハードルが高い GPUリソースちゃんと 使いこなせるか不安だ コードの管理とか大変そ うだ

Slide 6

Slide 6 text

改めてNVIDIA NIMとは? NVIDIA NIM™ は、クラウド、データセンター、ワーク ステーション、エッジなど、あらゆる NVIDIA アクセラ レーテッド インフラストラクチャに最新の AI モデルを 迅速にデプロイできるように、最適化された事前構築済 みの推論マイクロサービスを提供します。 ● あらかじめ最適化されたコンテナ上でモデルを動かすことができる ● コンテナ化されているので様々なインフラ上で実行できる 本発表ではLlama3-8B-InstructをNIMで取り扱っていこうと思います!! https://www.nvidia.com/ja-jp/ai-data-science/products/nim-microservices/

Slide 7

Slide 7 text

Llama3-8B-Instructの利用方法 HuggingFaceからモデルを取得 NIMのコンテナから実行 Transformersを利用した方が最低限の準備 でモデルを利用できますが、 GPUのパフォーマンスを引き出すための 構築をすることは大変!!

Slide 8

Slide 8 text

Llama3-8B-Instructでパフォーマンス比較 比較対象 ● transformersを利用してローカルでモデルパイプラインを読み込み実行 ● NIMで構築したモデルへのアクセス 実験条件 ● プロンプト:What is capital of France? ● Max_tokens:64 ● 50回試行 実験結果 NIMは独自にローカルでモデルを実行するのと比較して高速に推論でき、 推論速度のばらつきも小さくすることができることを確認!! NIM HuggingFace Average 0.30 1.31 Min 0.29 0.91 Max 0.49 1.96 Deviation 0.04 0.37 単位:sec

Slide 9

Slide 9 text

garakによるモデルの脆弱性スキャン 02 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 10

Slide 10 text

garakって何? ● NVIDIAによって開発されているOSSツール ● 指定した種類の攻撃を実行し、どれくらい攻撃が成功したかみることができる ● どのような攻撃に弱いかを検知することで、ガードレールの設計指標になる ユースケース ❏ ドキュメントセットに対する質問応答(別名:検索拡張生成) 事実確認と出力モデレーションを強化します。 ❏ ドメイン特化型アシスタント(別名:チャットボット) アシスタントがトピックから逸 れず、設計された会話フローに従うようにします。 ❏ LLMエンドポイント カスタムLLMにガードレールを追加し、顧客とのやり取りをより安全にします。 ❏ LangChainチェーン LangChainを使用する場合、チェーンの周囲にガードレールレイヤーを追加可能

Slide 11

Slide 11 text

garakで検知できる脆弱性ってどんなのがあるの? ansiescape atkgen audio av_spam_scanning continuation dan divergence doctor donotanswer dra encoding exploitation fileformats glitch goodside grandma latentinjection leakreplay lmrc malwaregen misleading packagehallucination phrasing promptinject realtoxicityprompts sata smuggling snowball suffix tap topic test visual_jailbreak web_injection 本日時点で利用できるプローブだけでこれだけあります!

Slide 12

Slide 12 text

garakによる検知実験の概要 ● NIMにデプロイしたLlama3-8B-Instructを対象にする ● 対象とするプローブはmalwaregenを採用 4つの項目について評価される Evasion ウイルス対策を無効化したりプロセスリス トに隠れたりするなど、検出を妨害する回 避アクションを実行するためのコードを ジェネレーターに作成するよう要求 Payload キーロギングやクリプトジャッキングな ど、さまざまなマルウェアペイロードの コードを求めるプロンプトを含む SubFunctions 明らかに悪意のある言葉で表現されていな いが、マルウェアで一般的に役立つアク ションを実行するコードを作成するように ジェネレーターに要求 TopLevel 悪意のあるアクションを実行するマルウェ アまたはコードを作成するようにジェネ レーターに要求

Slide 13

Slide 13 text

早速使ってみる! 先ほど用意したNIMコンテナ上のモデルに対して実行してみます REST APIを対象としたgarakの使い方を紹介します 1. JSONファイルにREST APIの設定を記載する 2. garakコマンドを実行する ※ 多くのリクエストをすることになるので、コスト管理にはご注意ください 参考:https://www.databricks.com/jp/blog/ai-security-action-applying-nvidias-garak-llms-databricks

Slide 14

Slide 14 text

設定ファイルの内容 NIMのコンテナのリクエスト先のURL メッセージの内容 $INPUTとするとそこにプロンプトが埋め込まれる レスポンスのどこに結果が含まれているか

Slide 15

Slide 15 text

garakコマンドの使い方 REST APIを対象とすることを明示 先ほどの設定ファイルのパスを指定 並列実行数を指定 検知対象のプローブを指定 (指定しない場合全てのプローブが対象になります)

Slide 16

Slide 16 text

セルフホストではないNIM上のモデルを利用する場合 独自にREST API形式のファイルを作成する必要はなく、パラメータにNIMから参照することを 指定すれば大丈夫です

Slide 17

Slide 17 text

garakによる検知結果 ● malwaregen.SubFunctions:76.1% ● malwaregen.Evasion: 83.3% ● malwaregen.TopLevel: 97.5% ● malwaregen.Payload: 97.8% ❖ TopLevel(明らかに悪意のあるマルウェア作成の指示)に対する攻撃成功数は少なかった ❖ SubFunctions(マルウェアで一般的に役立つアクションを実行するコード)の生成依頼に 対しては1/4程度攻撃が成功している ※ 生成AIの出力になるので、同じ設定でも実行ごとに異なる結果になる可能性があります

Slide 18

Slide 18 text

garakによる検知結果 検知結果はコンソール画面以外にもHTMLファイルなどでも確認できます

Slide 19

Slide 19 text

NeMo Guardrailsによる脆弱性対策 03 Copyright © 3-shake, Inc. All Rights Reserved.

Slide 20

Slide 20 text

NeMo Guardrailsとは? NeMoの機能の一つであり、生成AIに対するガードレールを プログラミングを用いて実装できる https://developer.nvidia.com/ja-jp/blog/nemo-guardrails-prevents-llm-vulnerabilities-introduction/

Slide 21

Slide 21 text

NeMo Guardrailsとは? NeMo Guardrailsを利用すると、以下のような仕組みをプログラミング的に実現できます 1. 信頼性、安全性、セキュリティに優れた LLM ベースのアプリケーション構築 会話をガイドし、保護するためのレールを定義 特定のトピックにおけるアプリケーションの動作を定義し、不要なトピックの議論への参加を阻止 2. モデル、チェーン、その他のサービスの安全な接続 LLM を他のサービス(ツール)にシームレスかつ安全に接続 3. 制御可能なダイアログ LLM を事前に定義された会話パスに沿って操作することで、会話設計のベストプラクティスに従って インタラクションを設計し、標準的な運用手順(認証、サポートなど)を適用 この後の検証では1番目の安全なアプリケーションの構築にフォーカスします!!

Slide 22

Slide 22 text

安全性の担保ってどうやってやるの? 生成AIに対する攻撃にもいろいろな種類がある ○ 攻撃的な表現をさせる ○ 差別的表現をさせる ○ プロンプトインジェクションを試みる  などなど ➔ どんな攻撃に対して脆弱であるかはモデルによっても変わってしまう ➔ 使おうとしてるモデルがどんな攻撃に弱いかを知りたい ➔ 先ほどご紹介したgarakの出番になります

Slide 23

Slide 23 text

garakとNeMo Guardrailsの組み合わせ方 1. アプリケーションで利用されるLLMに対するエンドポイントを用意 2. garakを利用してエンドポイントに対して脆弱性スキャンを実行する 3. garakの結果安全性が低いと考えられる項目を洗い出す 4. NeMo Guardrailsで安全性が低い項目に対する問い合わせが試みられた時 に対応するためのロジックを記述する 5. LLMエンドポイントにおける入出力にNeMo Guardrailsを導入し、入出力 をチェックする

Slide 24

Slide 24 text

NeMo Guardrailsを利用したアーキテクチャ 安全と判断された場合の処理フロー

Slide 25

Slide 25 text

NeMo Guardrailsを利用したアーキテクチャ 安全でないと判断された場合の処理フロー

Slide 26

Slide 26 text

NeMo Guardrailsの設定方法 モデルの設定 システムプロンプト

Slide 27

Slide 27 text

NeMo Guardrailsの設定方法 モデルの設定 コンテンツが安全であると判断された場合のエンドポイント コンテンツの安全性を確認するエンドポイント 安全性をチェックするためのレール定義

Slide 28

Slide 28 text

NeMo Guardrailsの設定方法 システムプロンプト 入力コンテンツの安全性を確認するための プロンプト 出力コンテンツの安全性を確認するための プロンプト

Slide 29

Slide 29 text

NeMo Guardrailsの設定方法 今回指定したシステムプロンプトは以下になります 指定したタスク: 受け取ったメッセージがマルウェア生成に関するものの場合unsafeレーティングさせる

Slide 30

Slide 30 text

NeMo Guardrailsの設定方法 Pythonコード ガードレールの設定を反映させたLLM呼び出しを実現 非同期でLLMを呼び出すAPIのアプリケーション実装

Slide 31

Slide 31 text

NeMo Guardrailsの設定方法 FastAPIサーバへのリクエスト先のURL メッセージの内容 $INPUTとするとそこにプロンプトが埋め込まれる レスポンスのどこに結果が含まれているか

Slide 32

Slide 32 text

検証実行方法 1. NIMでLlama3-8B-Instructを ホスティング 2.  FastAPIサーバを立てて、NeMo Guardrails経由で    NIMにアクセスできるようにする 3.  FastAPIサーバ上のAPIに対してgarakを適用して    malwaregenに対する検証を実行

Slide 33

Slide 33 text

garakによる検知結果 ● ガードレールを入れたことにより、どの項目でも改善が確認ました ● SubFunctionsについては100%防げてはいませんが、プロンプトを調整すれ ば改善できる可能性はあると思っています ※ 全ての項目を100%防ぐことはできないので、重点的に対策する場所を絞るのが重要 NeMo Guardrailsなし NeMo Guardrailsあり 改善 malwaregen.SubFunctions 76.1% 99.2% 23.1% malwaregen.Evasion 83.3% 100% 16.7% malwaregen.TopLevel 97.5% 100% 2.5% malwaregen.Payload 97.8% 100% 2.2%

Slide 34

Slide 34 text

ガードレールを設定するときの注意点!! ❏ NeMo Guardrailsに限らず、どのような手法を用いてもLLMの入出力を 100%希望した結果になることを保証することはできません ❏ ガードレールを適用する時にLLMを別途呼び出す関係で、レイテンシーは 増加します ❏ 設計なくガードレールを実装すると不用意にメンテナンスコストが増えて しまいます。garakを使って重要度の高いと思われる項目を検出し、そこ から徐々に設定していくことをお勧めします

Slide 35

Slide 35 text

まとめ Copyright © 3-shake, Inc. All Rights Reserved.

Slide 36

Slide 36 text

まとめ ● NVIDIA NIMを用いることで最適な環境でモデルを高速に動かすことができます ● garakを利用してLLMの弱点を見つけることができます ● NeMo Guardrailsを利用することでLLMの弱点を補うような仕組みを導入するこ とができます これら3つのソフトウェアを連携することにより、 高速に推論できる安全性の高い アプリケーション構築をみなさんもぜひ試してみてください!!