オープンソース ツールのフルセットを使用して LLM アプリケーションを構築する実践方法: Dify で Baichuan オープン ソース モデル機能を呼び出す

背景

オープンソースの大規模言語モデルの人気が高まっている現在の状況において、多くの開発者は、LLM の研究のためにオープンソース LLM をローカルに展開したり、オープンソース LLM に基づいて独自の LLM アプリケーションを構築したりすることを望んでいます。著者は、オープン ソース コミュニティの一連の優れた関連プロジェクトやローカライズされた展開サービスを通じて、独自の LLM アプリケーションを構築しようとしています。では、オープンソース LLM をローカルにデプロイしてチャット アプリケーションを構築するには、どのような準備が必要でしょうか?

ローカル環境の準備:

大規模なオープンソース モデルをローカルにデプロイする必要があるため、かなり本格的なローカル環境を準備する必要があります。ハードウェアには高性能かつ大容量のビデオメモリを搭載したNVDIAグラフィックスカード、大容量高速メモリ、大容量ソリッドステートドライブが必要で、ソフトウェアにはグラフィックスカードドライバ、CUDA、Python環境のインストールが必要です。今回は例として Baichuan-chat-13B モデルを実行することにしましたが、基本構成は CPU i9-13900K、GTX3090 24GB デュアル カード、64GB メモリ、2TB ソリッド ステート ドライブです。

大規模言語モデル (LLM):

これは、LLM アプリケーションを構築するための基礎です。LLM が異なれば、モデル構造も異なり、異なる事前トレーニング データとターゲット タスクに基づいて学習された知識も異なります。異なるモデルに基づいて構築された AI アプリケーションのパフォーマンスも異なります。人気の AI コミュニティ Hugging Face を通じて興味のあるオープンソース LLM を見つけて、機能を試したり比較したりできます。

LLM をローカルにデプロイする推論サービス:推論サービスは、事前トレーニングされた LLM モデルをローカル サーバーにロードし、モデル予測インターフェイスを提供できるため、LLM モデルをローカルで使用して、クラウド サービスに依存せずにさまざまな NLP タスクを実行できます。人気のオープンソース LLM の推論サービスをワンクリックでデプロイできる、いくつかの優れた GitHub オープン ソース プロジェクトを使用できます。比較的有名で星の数が多いものとしては、LocalAI、openLLM などが挙げられます。

シンプルで使いやすい「LLM オペレーティング システム」 Dify.AI: LLM 機能に基づいてチャット アプリケーションを構築したい場合は、次のような LLM テクノロジ スタックの完全なセットを検討する必要がある場合があります。モデル、ベクトルデータベースの選択、組み込み技術の研究など。オープンソース プロジェクト Dify.AI を使用すると、これらの調査および学習タスクを保存し、ビジュアル インターフェイスを通じてさまざまな LLM 機能に基づいた AI アプリケーションを迅速に作成できます。Dify の最新バージョンでは、オープン ソース LLM のサポートが追加されました。HuggingFace および Replicate でホストされているすべてのモデルは、すぐに呼び出して切り替えることができます。また、ローカル デプロイメントもサポートし、openLLM および Xorbits 推論推論サービスに基づいて AI アプリケーションを構築できます。

著者は、オープンソース LLMOps プラットフォーム Dify.AI、オープンソース推論サービス Xinference、およびオープンソース モデル baichuan-chat-13B を 例として使用して、Windows 環境で LLM チャット アプリケーションを構築する方法を段階的に説明します。 。さっそく作業に取り掛かりましょう。

環境整備

基本的な conda と Python は一般的に利用できるはずです。ただし、この記事では環境構成を一から紹介します!

Python環境を構成する

一般に、Python のバージョン管理には conda を使用することをお勧めします。まず、 conda 公式 Web サイトのドキュメントに従ってconda をインストールします[1] 。次に、conda を使用して Python 3.11 環境を初期化します。

conda create --name python-3-11 python=3.11
conda activate python-3-11

CUDAをインストールする

公式 Web サイトから直接インストールすることをお勧めします[2]Windows 11 下の図のバージョンを選択します。

ブートに従ってインストールした後、「NVDIA コントロール パネル -> システム情報」を開き、インストールされていることを確認します。

WSL2の準備

Dify の Docker デプロイには WSL2 環境を使用することをお勧めします。そこで、まず WSL2 をインストールします。Microsoft の公式ガイドラインを参照してください[3]

最初のステップは、CMD を管理者として実行することです。

2 番目のステップは、CMD で次のコマンドを使用してインストールします。

wsl --install

その結果、サポートされているさまざまなシステム バージョンがわかります。

适用于 Linux 的 Windows 子系统已安装。

以下是可安装的有效分发的列表。
请使用“wsl --install -d <分发>”安装。

NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
openSUSE-Leap-15.5                     openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed                    openSUSE Tumbleweed

select を使用してデフォルトの Ubuntu バージョンをインストールしました。

wsl --install -d Ubuntu

その後、CMD の「wsl」コマンドを使用して Ubuntu に入ることができます。

ステップ 3. Docker デスクトップをインストールする

Docker 公式ドキュメント[4]に移動して、「Docker Desktop」をダウンロードします。インストールするときは、「Hyper-V の代わりに WSL 2 を使用する」オプションを必ずチェックしてください。インストールが完了したら、コンピューターを再起動します。CMDで正常にインストールされているか確認してください。

wsl -l --verbose

 NAME                   STATE           VERSION
* Ubuntu                 Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2

WSLでUbuntuとDockerが動作していることがわかり、WSL2バージョンであることが確認できます。

ステップ 4: WSL 用のプロキシを構成する

WSL の IP アドレスは再起動するたびに変わるため、これを解決するスクリプトを作成できます。4 行目を独自のポート番号に変更します。

#!/bin/sh
hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
wslip=$(hostname -I | awk '{print $1}')
port=7890

PROXY_HTTP="http://${hostip}:${port}"

set_proxy(){
  export http_proxy="${PROXY_HTTP}"
  export HTTP_PROXY="${PROXY_HTTP}"

  export https_proxy="${PROXY_HTTP}"
  export HTTPS_proxy="${PROXY_HTTP}"

  export ALL_PROXY="${PROXY_SOCKS5}"
  export all_proxy=${PROXY_SOCKS5}

  git config --global http.https://github.com.proxy ${PROXY_HTTP}
  git config --global https.https://github.com.proxy ${PROXY_HTTP}

  echo "Proxy has been opened."
}

unset_proxy(){
  unset http_proxy
  unset HTTP_PROXY
  unset https_proxy
  unset HTTPS_PROXY
  unset ALL_PROXY
  unset all_proxy
  git config --global --unset http.https://github.com.proxy
  git config --global --unset https.https://github.com.proxy

  echo "Proxy has been closed."
}

test_setting(){
  echo "Host IP:" ${hostip}
  echo "WSL IP:" ${wslip}
  echo "Try to connect to Google..."
  resp=$(curl -I -s --connect-timeout 5 -m 5 -w "%{http_code}" -o /dev/null www.google.com)
  if [ ${resp} = 200 ]; then
    echo "Proxy setup succeeded!"
  else
    echo "Proxy setup failed!"
  fi
}

if [ "$1" = "set" ]
then
  set_proxy

elif [ "$1" = "unset" ]
then
  unset_proxy

elif [ "$1" = "test" ]
then
  test_setting
else
  echo "Unsupported arguments."
fi

5 番目のステップは、Ubuntu に入り、conda をインストールし、Python を構成することです。

前回の環境準備と同様に、公式ドキュメントに従ってcondaのインストールとPythonの設定を行いますが、インストールするのはLinux版です。

ステップ 6、WSL 用の CUDA をインストールする

公式 Web サイトにアクセスし、WSL-Ubuntu バージョンを選択し、指示に従ってコマンド ラインを使用してインストールします。

ステップ 7、PyTorch をインストールする

PyTorch 公式 Web サイト[5]に入り、環境に応じて PyTorch をインストールします。

これで環境の準備は完了です。

推論サービス Xinference をデプロイする

Dify の展開ドキュメント[6]によると、Xinference はかなりの数のモデルをサポートしています。今回は、Xinference を選択して、baichuan-chat-3B を試してみましょう。

Xorbits 推論は、ラップトップ上でも大規模な言語モデル、音声認識モデル、マルチモーダル モデルを提供できるように設計された強力で多用途の分散推論フレームワークです。ChatGLM、Baichuan、Whisper、Vicuna、Orca など、さまざまな GGML 互換モデルをサポートしています。Dify は、Xinference によって展開された大規模な言語モデルの推論機能と埋め込み機能にアクセスするためのローカル展開をサポートしています。

Xinfernece をインストールする

WSL で次のコマンドを実行します。

$ pip install "xinference"

上記のコマンドは、推論のための Xinference の基本的な依存関係をインストールします。Xinference は「ggml 推論」と「PyTorch 推論」もサポートしています。次の依存関係をインストールする必要があります。

$ pip install "xinference[ggml]"
$ pip install "xinference[pytorch]"
$ pip install "xinference[all]"

Xinference を開始し、baichuan-chat-3B モデルをダウンロードしてデプロイします。

WSL で次のコマンドを実行します。

$ xinference -H 0.0.0.0

Xinference はデフォルトでローカルでワーカーを開始します。エンドポイントは次のとおりです。

「  http://127.0.0.1:9997  」、デフォルトのポートは「9997」です。デフォルトでは、ローカル コンピュータからのみアクセスできますが、「-H 0.0.0.0」を設定すると、ローカル以外のクライアントも自由にアクセスできます。「ホスト」または「ポート」をさらに変更する必要がある場合は、「xinference --help」で xinference のヘルプ情報を表示できます。

2023-08-25 18:08:31,204 xinference   27505 INFO     Xinference successfully started. Endpoint: http://0.0.0.0:9997
2023-08-25 18:08:31,204 xinference.core.supervisor 27505 INFO     Worker 0.0.0.0:53860 has been added successfully
2023-08-25 18:08:31,205 xinference.deploy.worker 27505 INFO     Xinference worker successfully started.

ブラウザで開きます: http://localhost:9997、baichuan-chat、pytorch、13B、4bit を選択し、[作成] をクリックしてデプロイします。

または、CLI を使用してデプロイします。

xinference launch --model-name baichuan-chat --model-format pytorch --size-in-billions 13 --quantization 4

モデルごとにハードウェア プラットフォームでの互換性が異なるため、Xinference 組み込みモデル[7]を確認して、作成されたモデルが現在のハードウェア プラットフォームをサポートしているかどうかを確認してください。

Xinference を使用してモデルを管理する

デプロイされたすべてのモデルを表示するには、コマンド ラインで次のコマンドを実行します。

$ xinference list

次のような情報が表示されます。

UID                                   Type    Name           Format      Size (in billions)  Quantization
------------------------------------  ------  -------------  --------  --------------------  --------------
0db1e250-4330-11ee-b9ef-00155da30d2d  LLM     baichuan-chat  pytorch                     13  4-bit

「0db1e250-4330-11ee-b9ef-00155da30d2d」は、デプロイされたばかりのモデルの uid です。

Dify.AIを導入する

主なプロセスについては、公式 Web サイトの展開ドキュメントを参照してください[8]

クローンディファイ

Dify ソース コードをローカルにクローンする

git clone https://github.com/langgenius/dify.git

ディファイを開始する

差分ソース コードの docker ディレクトリに移動し、ワンクリック起動コマンドを実行します。

cd dify/docker
docker compose up -d

導入結果:

[+] Running 7/7
 ✔ Container docker-weaviate-1  Running                                                0.0s 
 ✔ Container docker-web-1       Running                                                0.0s 
 ✔ Container docker-redis-1     Running                                                0.0s 
 ✔ Container docker-db-1        Running                                                0.0s 
 ✔ Container docker-worker-1    Running                                                0.0s 
 ✔ Container docker-api-1       Running                                                0.0s 
 ✔ Container docker-nginx-1     Started                                                0.9s

最後に、すべてのコンテナが適切に実行されているかどうかを確認します。

docker compose ps

動作状況:

NAME                IMAGE                              COMMAND                  SERVICE             CREATED             STATUS              PORTS
docker-api-1        langgenius/dify-api:0.3.16         "/bin/bash /entrypoi…"   api                 24 hours ago        Up 3 hours          5001/tcp
docker-db-1         postgres:15-alpine                 "docker-entrypoint.s…"   db                  33 hours ago        Up 3 hours          0.0.0.0:5432->5432/tcp
docker-nginx-1      nginx:latest                       "/docker-entrypoint.…"   nginx               24 hours ago        Up 4 minutes        0.0.0.0:80->80/tcp
docker-redis-1      redis:6-alpine                     "docker-entrypoint.s…"   redis               33 hours ago        Up 3 hours          6379/tcp
docker-weaviate-1   semitechnologies/weaviate:1.18.4   "/bin/weaviate --hos…"   weaviate            33 hours ago        Up 3 hours          
docker-web-1        langgenius/dify-web:0.3.16         "/bin/sh ./entrypoin…"   web                 33 hours ago        Up 3 hours          3000/tcp
docker-worker-1     langgenius/dify-api:0.3.16         "/bin/bash /entrypoi…"   worker              33 hours ago        Up 3 hours          5001/tcp包括 3 个业务服务「 api / worker / web 」,以及 4 个基础组件「 weaviate / db / redis / nginx 」。

3つのビジネスサービス「api/worker/web」と4つの基本コンポーネント「weaviate/db/redis/nginx」が含まれます。

Docker が正常に起動したら、ブラウザで http://127.0.0.1/ にアクセスします。パスワードを設定してログインすると、アプリ一覧ページに遷移します。

この時点で、Dify Community Edition は Docker を使用して正常にデプロイされました。

Dify で Xinference に接続する

モデルプロバイダーの構成

「設定 > モデル サプライヤー > Xinference」にモデル情報を入力します。

  • モデル名は、モデルのデプロイメントに付ける名前です。
  • サーバー URL は xinference のエンドポイント アドレスです。
  • モデル UID は、xinference リストを通じて取得された、デプロイされたモデルの UID です。

サーバー URL は localhost を使用できないことに注意してください。localhost を入力すると、docker 内の localhost にアクセスすることになり、アクセスが失敗するためです。解決策は、サーバー URL を LAN IP に変更することです。WSL 環境では、WSL IP アドレスを使用する必要があります。

WSL でコマンドを使用して、以下を取得します。

hostname -I
172.31.157.121

バイチュアンチャットを使用する

アプリケーションを作成した後、アプリケーション内の前の手順で構成した baichuan-chat-3B モデルを使用できます。Dify のプロンプト ワード配置インターフェイスで、baichuan-chat モデルを選択し、アプリケーションのプロンプト ワード (プロンプト) を設計して、アクセシビリティ対応の AI アプリケーションを公開します。

上記は、Dify をローカルにデプロイし、Xinference がデプロイした baichuan-chat に接続するプロセス全体です。この時点で、baichuan-chat-13B に基づくチャット アプリケーションは基本的に完成しました。

追記

もちろん、実稼働レベルの LLM アプリケーションの場合、大規模モデルのアクセス、推論、チャット対話を完了するだけでは十分ではありません。また、LLM のプロンプトを具体的に調整したり、コンテキストとしてプライベート データを追加したり、LLM 自体を微調整したりする必要があるため、LLM アプリケーションのパフォーマンスを向上させるには長期的な反復と最適化が必要です。Dify.AI は、ミドルウェア ツール プラットフォームとして、完全な LLM アプリ テクノロジー スタックのためのビジュアル オペレーティング システムを提供します。上記の基本的なサービスの導入が完了すると、以降のアプリケーションの反復や改善は Dify をベースに行うことができるため、LLM アプリケーションの構築と管理がよりシンプルで使いやすくなり、クリーンアップはビジネス データを直接アップロードすることで自動的に完了します。 、将来的にはデータの注釈や改善サービスも提供され、ビジネスチームもコラボレーションに参加できるようになります。

現時点では、LLM の開発と適用はまだ非常に初期段階にありますが、近い将来、LLM 機能のリリースや、LLM に基づくさまざまなツールの機能の継続的な改善が、その閾値になると考えています。開発者が LLM 機能を探索する機会は今後も低くなりますが、豊富なシナリオを備えた AI アプリケーションがさらに登場するようにしてください。


Dify が好きなら、ようこそ:

  • GitHub にコードを投稿して、私たちと一緒により良い Dify を構築してください。
  • オンラインおよびオフラインのアクティビティやソーシャル メディアを通じて、Dify とあなたの経験を友人と共有します。
  • GitHub でぜひお知らせください ⭐️

また、Dify アシスタントに連絡して友人グループ チャットに参加して、お互いに経験を共有することもできます。

おすすめ

転載: blog.csdn.net/DifyAI/article/details/132622617