Alibaba Cloud Platform for AI の導入とLangChain（PAI-EAS）をデプロイする

AIの世界は日進月歩で進化しており、それを支える技術として各社から様々なプラットフォームが提供されています。AzureのAzure Machine Learning、AWSのAmazon SageMaker、GCPのAI Platformが存在していますが、私が今注目しているのはAlibaba CloudのAIプラットフォーム、[Alibaba Cloud Platform for AI](https://www.alibabacloud.com/product/machine-learning?spm=a2c65.11461447.0.0.326b1503lshnPs) (PAI)です。日本ではまだ馴染みの少ないこのプラットフォームがどのようなものなのか、どんな機能を持っているのかを調べてみました。

## PAI の特徴

PAIは 2018年から存在しており、2021年4月にはソフトバンクにてPAIの概要が記載されています。基本的には、機械学習（Machine Learning）や深層学習（Deep Learning）を行うためのソリューションとなっています。 使いやすく、コスト効率が高く、拡張性があり、企業や開発者向けの機械学習・深層学習エンジニアリングプラットフォームです。

[https://www.softbank.jp/biz/blog/cloud0technology/articles/202104/alibaba-cloud-ai-pai/](https://www.softbank.jp/biz/blog/cloud-technology/articles/202104/alibaba-cloud-ai-pai/) 

下記がメインの機能となるようです。

- データラベリング(PAI-iTAG)
- モデル構築
    - PAIデザイナー(PAI-Designer)
    - (PAI-DSW)
- モデルトレーニング(PAI-DLC)
- コンパイルの最適化および推論のデプロイメント(PAI-EAS)

など、AIエンジニアリングの全プロセスをカバーしています。

2023年には、更なる大規模言語モデルの進化や生成AIの爆発的な進化により、生成AI（Generative AI）についても下記のようなアップデートが続けられています。主にPAI-EASがアップデートされています。

- **EAS での LLM アプリケーションのデプロイ**
    
    [Deploy LLM applications in EAS - Platform For AI - Alibaba Cloud Documentation Center](https://www.alibabacloud.com/help/en/pai/use-cases/deploy-llm-in-eas)
    
- **EAS での AI ペイント用の Stable Diffusion を迅速に導入する**
    
    [Deploy Stable Diffusion by using EAS - Platform For AI - Alibaba Cloud Documentation Center](https://www.alibabacloud.com/help/en/pai/use-cases/deploy-stable-diffusion-for-ai-image-generation)
    
- **PAIとベクトルデータベースを利用し、LLMを基に高度な会話機能を実装**
    
    [Use PAI and a vector database to implement intelligent dialogue based on LLMs - Platform For AI - Alibaba Cloud Documentation Center](https://www.alibabacloud.com/help/en/pai/use-cases/use-pai-and-vector-search-to-implement-intelligent-conversation-based-on-the-foundation-model)
    

今回は、アップデートされた生成AIを利用するPAI-EASでのLangChainを学んでいきます。

## PAI の Activate

PAIを利用する為にActivate作業が必要になります。

Alibaba Cloudのコンソールにて、PAIの画面へ移動します。

[https://pai.console.aliyun.com/?regionId=cn-shanghai#/workspace/welcome](https://pai.console.aliyun.com/?regionId=cn-shanghai#/workspace/welcome)

日本リージョンが存在しない為、上海リージョンを選択しました。

`Activate  Platform for AI and create a default workspace` でサイドバーが出てきます。

![pai001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/f6a7fa21-8f37-8519-69d9-326bf04ab6ca.png)

各必要な項目にチェックを入れていきます。

`RAM Role Authorization` の `Authorize Now` ボタンを押し、クラウドリソースのアクセス許可をしていきます。

![pai002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/a36793f0-be38-c210-1bcd-ac84e122f98b.png)

`許可に同意` ボタンで許可していきます。

![pai003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/ef57f408-a3b3-5fa5-ea03-b58c1e1eb921.png)

`Activate and Create Default Workspace` を押していきます。

Workspace が作成完了し、 `Go to Default Workspace` で移動していきます。

![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/0832e433-a0bb-e519-467f-db4c3b848ddb.png)

## PAS−EASの構築

`Platform for AI` のページに移動し、EASを開始していきます。

![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/643ad9c3-40e2-6383-4fac-5e2956bf4f43.png)

EASに必要な許可を追加する必要があります。

![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/eac4a64f-40c0-4716-8d6b-58865b4683bb.png)

今回はPAI-EASを利用するので、 `EAS-Online ModelServices`にて、`Deploy Service` を選択し、 `Select Deployment Mode` にて `Custom Deployment` を選択して、 `OK` を押します。

![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/d36016d1-8375-4523-9f48-729597d8b0b0.png)

Deploy Serviceの画面にて、下記のように入力していきます。

| パラメータ | 説明 |
| --- | --- |
| Service Name | サービスの名前。
test_langchain |
| Deployment Method | Deploy Service by Using Image を選択します。 |
| Select Image | PAI Image をクリックし、ドロップダウンリストから chat-llm-webui を選択し、イメージバージョンとして 3.0 を選択します。 |
| Command to Run | 今回利用するのはllama2なので、下記を指定。
コマンド： python webui/webui_server.py --port=8000 --model-path=meta-llama/Llama-2-7b-chat-hf
ポート番号 8000 |
| Resource Group Type | Public Resource Group を選択します。 |
| Resource Configuration Mode | General を選択します。 |
| Resource Configuration | GPU タブでInstance Typeを選択します。コスト効率の観点から、 ecs.gn6i-c4g1.xlarge のインスタンスタイプの使用を利用します。 |
| VPC | 利用可能なVPCを設定する |

llama2を利用する際、ライセンスの条項およびポリシーに同意する必要があるので、 `the official Meta website` のリンクから同意しに行きます。

`Deploy` で実行します。

![011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/98e4e30b-7c23-a11a-461e-ca7f6fec63eb.png)

デプロイ完了すると、 `Running` 表記されます。

![012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25772/edf92886-a301-daf8-5fe1-e1e96166b4c8.png)

## LangChain の繋ぎ込み

ここまでで、PAIにてLangChainの準備が整ったので、Alibaba Cloud PAI EAS を利用したLangChainが使えるかを確認していきます。

LangChainの公式にサンプルがあるので、試していきます。

[https://python.langchain.com/docs/integrations/chat/alibaba_cloud_pai_eas](https://python.langchain.com/docs/integrations/chat/alibaba_cloud_pai_eas)

langchainをインストールし、下記を実行していきます。

```python
import os
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain_community.llms.pai_eas_endpoint import PaiEasEndpoint

os.environ["EAS_SERVICE_URL"] = "Your_EAS_Service_URL"
os.environ["EAS_SERVICE_TOKEN"] = "Your_EAS_Service_Token"

template = """Question: {question}

Answer: Let's think step by step."""

prompt = PromptTemplate.from_template(template)
llm = PaiEasEndpoint(
    eas_service_url=os.environ["EAS_SERVICE_URL"],
    eas_service_token=os.environ["EAS_SERVICE_TOKEN"],
)

llm_chain = prompt | llm
question = "What NFL team won the Super Bowl in the year Justin Beiber was born?"
llm_chain.invoke({"question": question})
```

```python
' Thank you for asking! However, I must respectfully point out that the question contains an error. Justin Bieber was born in 1994, and the Super Bowl was first played in 1967. Therefore, it is not possible for any NFL team to have won the Super Bowl in the year Justin Bieber was born.\n\nI hope this clarifies things! If you have any other questions, please feel free to ask.'
```

問いかけに答えてくれました！

## PAI の金額感

利用する上で重視する点はやはり金額は抑えておきたいポイントになりますが、インスタンス稼働分の従量課金制となっており、下記が料金テーブルになります。

[https://www.alibabacloud.com/product/machine-learning/pricing](https://www.alibabacloud.com/product/machine-learning/pricing)