LoginSignup
2
1

はじめに

これはAlibaba CloudのkubernetesやServerless製品(SAEなど)でサービス立ち上げてみよう by Alibaba Cloud Advent Calendar 2023 の記事です。
私は日頃からAlibaba Cloudによるソリューションや開発手法、展開に取り組んでおり、日々中国や全世界から最先端の技術取得に励んでいます。
そうした活動をもっと外部へと発信していこうと始めたのがこのAdventCalendarです。メンバー一人一人が書いた記事を通して、少しでも多くの方にAlibaba Cloudの興味を持って頂ければ幸いです。
さて、本記事はFunction ComputeでさくっとStable Diffusion API環境を立ち上げてみる話です。

StableDiffusionのAPIサーバを立ち上げたいけど、通常の仮想サーバだと、使ってない時間帯でも課金してしまうなどコスパが悪いと思います。そのため、Function Computeを使って、Stable Diffusion APIサーバをクイックに立ち上げてみます。

このチュートリアルについて

対象となる方:

このガイドは、次の方を対象としています。

  • Alibaba Cloud, Function Compute に関する基本的な知識を持つこと

前提条件:

  • Alibaba cloud アカウントを持つこと
  • Alibaba CloudでFunction Computeを有効化していること

Alibaba Cloud Function Computeでアプリケーションを構築

Function Computeで、Application画面へ遷移し、新規プロジェクトを作成します。

image.png

Alibaba CloudのFunction Computeで嬉しいのが、テンプレートによる素早いデプロイができることです。FunctionComputeには様々なテンプレートが備えており、目的に応じた構築・運用をすることができます。
Application 画面にて、 「stable-diffusion-api」と入れると、fc-stable-diffusion-api というテンプレートが表示されます。

image.png

Create Now をクリックします。
image.png

Function Computeは、テンプレートをデプロイする際、2つの方法を提供しています。

  • Deploy from Code Repository:アプリケーションを作成する際、指定したコードのrepository、テンプレートの同期、アプリケーションの作成、環境の作成、パイプラインの配置設定などのStepが含まれます。

  • Directly Deploy:直接デプロイなので、コードは自動的にオンラインにデプロイすることができます。プロジェクトを保守または更新する場合は、機能リソースを手動で管理する必要があります。

<参考>
Manage applications
https://www.alibabacloud.com/help/en/fc/manage-applications

今回は後者なので、Deployment TypeDirectly Deploy を選定します。

image.png

Role Name で、Authorize、新たな認可を与えます。
image.png

Confirm Authorization Policy ボタンをクリックします。

image.png

image.png

Regionを選定します。今回は日本Regionを選びます。

image.png

rawing typeを選定します。これローカライズされてないので、少し行き詰まっていましたが、会社の中国語ネイティブ同僚に聞いたら、以下の選択肢は次の意味のようです。

  • 动漫风格⇒アニメスタイル
  • 真人风格⇒実生活スタイル
  • 轻量版⇒ライト版

今回はアニメスタイル、动漫风格 を選定します。

image.png

このまま下へスクロールすると、「選択したアプリケーションには追加のパーミッションが必要です: AliyunFCFullAccess。」 とエラーが発生しています。

image.png

ここは「Add Policy」ボタンをクリックしながら、AliyunFCFullAccess を追加します。

image.png

すると、別ページ(RAMロール設定)へ飛ばされますが、ここもConfirm Authorization Policy ボタンをクリックします。

image.png

そうすることで、再度FCのページに戻りますので、設定を続けます。
ここまでの設定が問題なければ、Create and Deploy Default Environment ボタンをクリックし、デプロイさせます。

image.png

進捗ステータスが表示されますが、すぐ終わります。

image.png

再度コンソールページとして表示されます。こちらは現在デプロイ中のステータスのようです。しばらく待ってみます。

image.png

デプロイが終わったようです。

image.png

ログもきちんと確認できています。

image.png

このにある、http://sd.fc-stable-diffusion-api.xxxxxxxxxx.ap-northeast-1.fc.devsapp.net/ が、APIサーバのURLとなります。これをWebブラウザで開いてみます。

image.png

これはどうもFastAPIなので、URLの端っこに「docs」を追加します。

image.png

API一覧が表示されました。このAPI一覧を参考にしながら、Pythonによるコード作成をしてみます。

APIの詳細は先ほどのdocsから確認できます。
image.png

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355017/a1b037be-46d1-8c19-ae37-1c52467f0cfb.png)
import json
import base64
import requests


def submit_post(url: str, data: dict):
    return requests.post(url, data=json.dumps(data))


def save_encoded_image(b64_image: str, output_path: str):
    with open(output_path, 'wb') as image_file:
        image_file.write(base64.b64decode(b64_image))


if __name__ == '__main__':
    txt2img_url = r'http://sd.fc-stable-diffusion-api.xxxxxx.cn-hangzhou.fc.devsapp.net/sdapi/v1/txt2img'

    data = {'prompt': 'Flying dog and chasing cat',
            'negative_prompt': '',
            'sampler_index': 'DPM++ SDE',
            'seed': 1234,
            'steps': 20,
            'width': 512,
            'height': 512,
            'cfg_scale': 8}

    response = submit_post(txt2img_url, data)
    save_image_path = r'tmp.png'
    save_encoded_image(response.json()['images'][0], save_image_path)


image.png

このコードを実行します。その結果、画像が返却・表示されました。
しかし、犬のほうで足が一本足りないのはなぜでしょうね。。

image.png

さいごに

本記事ではFunction ComputeでさくっとStable Diffusion API環境を立ち上げてみる方法をご紹介しました。Function Computeは様々なテンプレートがあるため、この構築に30分もかからないと思いますので、Stable Diffusion API環境が欲しい方は参考にしてみるといいでしょう。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1