🏝️

AWS Cloud9でAIアプリケーションを動かしたときの3つの落とし穴

2023/08/28に公開

背景

7月下旬に弊社ライフイズテックは、ある中学校でAIを利用した課題解決を体験する授業を行いました。生徒の皆さんに、地域の観光スポットを紹介する対話型アプリを更新しながら、AIにどのような指示を出せばどんな反応が返ってくるのかを学んでもらいました。

AIはときどき、実際には存在しない場所やお店を推薦するような「ハルシネーション」を起こします。これはAIが完全なものではなく、時に間違いを起こすことを象徴しています。そのようなAIの反応も、例えば適切なWebサイトの情報を与えることで改善が見られます。

このように授業を通じてAIの可能性とその限界、そしてその間違いをどう修正していくかという実践的な知識を生徒の皆さんに体験してもらいました。

授業で使ったAIアプリケーション

実際の授業で使ったAIアプリケーションは、参加する生徒の数だけ事前にAWS Cloud9(以下Cloud9)にインストールする必要がありました。Cloud9はブラウザだけでコードの記述から実行、デバッグまでできるクラウドベースのIDE(統合開発環境)です。弊社が中学・高校の情報の授業向けにご提供している「ライフイズテックレッスン」というサービスにも組み込まれています。

https://lifeistech-lesson.jp/

生徒の皆さんに授業で使ってもらうAIアプリケーションは以下の仕様でした。

  • 言語・フレームワーク
    • Djangoフレームワークを用いたPython製のアプリケーション。
  • 起動方法
    • docker-composeを使用して、コンテナ内でアプリケーションが起動します。
    • Cloud9のEC2インスタンスが立ち上がったときに、アプリケーションも自動的に動作します。
  • 会話機能
    • OpenAIのAPIを利用して、ChatGPTのようにキャラクターとリアルタイムで会話ができます。
  • 音声機能
    • VOICEVOXという技術と連携し、キャラクターが実際に声で応答することもできます。

遭遇した3つの落とし穴

1. プレビューを利用するときのポート番号

Cloud9ではアプリケーションを起動したとき、メニューから直接プレビューを確認できます。まるでローカル環境で動かしているかのように、リアルタイムでアプリケーションの動作を確認しながら開発を進めることができます。

ただ、プレビューの機能を利用する場合、起動するポート番号が決まっています。具体的には、8080、8081、8082番のポートを使用することが求められます。Cloud9で開発する場合、こちらのポート番号を頭に入れておいたほうがよさそうです。

https://docs.aws.amazon.com/ja_jp/cloud9/latest/user-guide/app-preview.html#app-preview-preview-app

2. コンソールとCLIのAMIの違い

Cloud9環境を作成するとき、使用するツールによってデフォルトのOSが異なります。具体的には、コンソールを利用すると、デフォルトでAmazon Linux2が選択されています。

一方、AWS CLIで以下のようなコマンドを実行してもCloud9環境を構築することができます。

aws cloud9 create-environment-ec2 --name (Cloud9の環境名) --instance-type (インスタンスタイプ) --region ap-northeast-1 --subnet-id (サブネットID) --automatic-stop-time-minutes (自動停止までの時間(分))

ただCLIの場合、--image-idオプションを指定しなければ、OSはAmazon Linuxになります。今回、docker-composeを自動起動する目的でSystemdを利用しましたが、Amazon LinuxにはSystemdが含まれていないため、環境を作り直すことになりました。

また、--image-idオプションにはAMIのIDを入れたくなってしまいますが、 --ami-id=amazonlinux-2-x86_64 のようにエイリアスを利用するか、SSMのパスを指定する必要があります。詳しくはこちらのドキュメントを参照してください。
https://docs.aws.amazon.com/cli/latest/reference/cloud9/create-environment-ec2.html

3. 通信するデータ量の制限

今回のアプリケーションはVOICEVOXを利用しているため、特に音声データの通信料が多いという特徴があります。Cloud9のプレビューで動かしてみると、質問に対する回答が長いとき、AIからの応答が返ってこないという問題に直面しました。

原因について正確なことは言えないのですが、ログから判断するとデータサイズの制限を超えたため、Cloud9のプレビュー環境の内部に配置されているプロキシやロードバランサーで、データが途中でカットされている可能性が考えられます。

こちらの問題を解決するために、Elastic IP(EIP)をCloud9のEC2インスタンスにアタッチし、さらにDNSレコードを設定して、EC2インスタンスに直接アクセスするように変更しました。その結果、VOICEVOXを活用した音声の応答もスムーズに動作するようになりました。

最後に

AI技術は日々進化しており、これからの時代、私たちの生活の中でより身近な存在となっていきます。今回実施したような授業をますます広めていくことで、次世代を担う中高生にはAIのポテンシャルを理解し、その力を利用して身の回りの課題解決に取り組んでほしいと思います。

先日、弊社のライフイズテックスクールでも「AIクリエイティブコース」を新設しました。ご興味を持たれた方は、ぜひ一度チェックしてみてください。
https://life-is-tech.com/news/news/220822-release


ライフイズテック サービス開発部では、月毎に気軽にご参加いただけるカジュアルなイベントを実施しています。開催予定のイベントは、 connpass のグループからご確認ください。興味のあるイベントがあったらぜひ参加登録をお願いいたします。皆さんのご参加をお待ちしています!

Discussion