Closed16

Text to Image Slack Bot

Koki IbukuroKoki Ibukuro

DALL·E 2やImagenなどのText to Image のモデルが楽しそう。商用可のモデルも増えて来ていることだし、Slackでボットにメッセージ送ると、画像を返してくれるbotを作ると社内でも盛り上がるし、Text to Imageの知見が貯まりそうだよね。ってことで調べてみる。

Koki IbukuroKoki Ibukuro

リサーチ

有名所

https://openai.com/dall-e-2/

https://imagen.research.google/

https://www.midjourney.com/

いづれもWaiting List載せてるけど、まだ入れてない…。

Pre-Trained で 商用可能なモデルたち

最近は商用化なライセンス且つ、Pre-trainedなモデルを公開してくれているところもあるのでここらへんを試せるようにするのが本命。

https://github.com/CompVis/latent-diffusion#text-to-image

https://github.com/borisdayma/dalle-mini

https://github.com/yumingj/Text2Human

https://github.com/THUDM/CogView2

  • Replicate 上で試せるモデルがある

商用可能だけど、モデル非公開

https://github.com/google-research/parti

https://github.com/lucidrains/imagen-pytorch

Koki IbukuroKoki Ibukuro

Slack Botを作る戦略メモ

Google Cloud Run上でDockerで動かす
https://towardsdatascience.com/deploy-your-ml-model-as-a-web-service-in-minutes-using-gcps-cloud-run-ee9d433d8787

Hugging Faceにモデルを公開してAPIを使う
https://huggingface.co/docs/hub/models-inference

Hugging FaceのAPI仕様
https://huggingface.co/docs/api-inference/detailed_parameters

Replicateというのもあるっぽい
https://replicate.com

AWS LambdaでSlack Botを作る的なチュートリアル

https://dev.to/josuebustos/post-messages-to-slack-using-aws-lambda-function-urls-5f2a

https://api.slack.com/tutorials/events-api-using-aws-lambda

DeployとかはGitHub Actionsで自動化したい。

https://github.com/marketplace/actions/aws-lambda-deploy

PythonでインストールしたパッケージごとAWSに上げるチュートリアル
https://docs.aws.amazon.com/lambda/latest/dg/python-package.html

Koki IbukuroKoki Ibukuro

GitHub Action経由でLambdaにdeployできるのあるから今後のために試してみよう!て思ったら設定がめんどいぞ。

name: Deploy to Lambda
on:
  push:
    branches:
      - main
  workflow_dispatch:
jobs:
  deploy_zip:
    name: Deploy to Lambda
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.9'
      - name: Setup lambda_package.zip
        run: bash make_package.sh
      - name: default deploy
        uses: appleboy/lambda-action@master
        with:
          aws_region: ${{ secrets.AWS_REGION }}
          aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          function_name: ml_playground
          description: Slack Bots that runs ML tasks via Hugging Face API
          zip_file: lambda_package.zip
          memory_size: 256
          timeout: 900
          handler: lambda_function.lambda_handler
          runtime: python3.9
          publish: false
          environment: HUGGINGFACE_API_TOKEN=${{ secrets.HUGGINGFACE_API_TOKEN }}

最終的にこんな感じの設定になったが、連続で実行するとこんな感じの警告がでるので、デバッグ時には自分でzipをアップロードするほうが良いかもしれない。

ResourceConflictException: The operation cannot be performed at this time. An update is in progress for resource
Koki IbukuroKoki Ibukuro

お、うごいた!

が、なるほど、作ったSlack Botを他のワークスペースで使えるようにするにはoauthが必要なのね…。めんどいぞこりゃ。

https://medium.com/analytics-vidhya/

https://github.com/cazabec/slackbot-aws-lambda

とりあえず非公開で、2つのワークスペースでしか使わない予定なので。
それぞれのslack workspaceでボットを立てて、AWS Lambdaも2個立てちゃう方が簡単な気がする。

Koki IbukuroKoki Ibukuro

3秒以内に返さないとリトライされるって仕様は、

正しくは、Lambdaをイベント駆動にする方法を使いたかった…が、うまく動かない…。
https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-integration-async.html

ので強制的にタイムアウトさせるっていう糞仕様で対応した。なんとかしたい。
https://github.com/asus4/ml-slack-bots/blob/b2980bee9ddebaa64a4f7927891f3f07e0f39a16/lambda_function.py#L112-L113

複数のモデルを試したかったので、Slackコマンドでモデルを試せるようにした。

このスクラップは2022/07/06にクローズされました