DUICUO

Truss、Docker、Kubernetes を使用してオープンソース モデル Falcon-7B をクラウドにデプロイします。

翻訳者|朱賢宗

校正者 | Chonglou

背景

ここまで、 ChatGPTの機能強力な機能について見てきました。しかし、企業アプリケーションにおいては、ChatGPTのようなクローズドソースモデルは、企業自身が自社データを管理できないため、リスクをもたらす可能性があります。OpenAIユーザーデータが保存されたり、モデルのトレーニングに使用されたりしないと主張していますこれはデータが何らかの形で漏洩しないことを保証するものではありません。

クローズドソースモデルに関連するいくつかの問題に対処するため、研究者たちはChatGPTのようなモデルに対抗できるオープンソースの大規模言語モデル( LLM の構築に熱心に取り組んでいます。オープンソースモデルであれば、企業は安全なクラウド環境でホストできるため、データ漏洩のリスクを軽減できます。最も重要なのは、モデルの内部動作を完全に透明化できるため、ユーザーがAIシステムへの信頼を高めることができることです

オープンソース LLM の最新の開発により、人々は新しいモデルを試して、ChatGPT などのクローズドソース モデルとの比較をすることに熱心になっています。

しかし、今日でもオープンソースモデルを実行するには依然として大きな障害が存在します例えば、 ChatGPT APIを呼び出すのは、オープンソースLLMの実行方法を理解するよりもはるかに簡単です

この記事では、 Falcon-7Bモデルのようなオープンソースモデルをクラウド上の本番環境に近い環境で実行する方法を示すことで、前述の困難を克服することを目標としています最終的には、 ChatGPTと同様のAPIエンドポイントを介してこれらのモデルにアクセスできるようになる予定です

チャレンジ

オープンソースモデルを実行する上での大きな課題は、コンピューティングリソースの不足です。Falcon -7Bのような「小型」モデルでさえ、実行にはGPUが必要です。

この問題に対処するには、クラウドでGPUを活用することができます。しかしこれは新たな課題をもたらします。LLMをどのようにコンテナ化してラップするのか GPUサポートをどのように有効化するか?GPUサポートの有効化はCUDAの知識が必要となるため、難しい場合があります。CUDAの使用は、適切なCUDA依存関係のインストール方法や互換性のあるバージョンを把握する必要があるため、困難を極める可能性があります。

[訳者注] CUDA(Compute Unified Device Architecture)は、グラフィックスカードメーカーのNVIDIAが立ち上げたコンピューティングプラットフォームです。CUDA™は、NVIDIAが導入した汎用並列コンピューティングアーキテクチャであり、CUDA命令セットアーキテクチャ(ISA)とGPU内部の並列コンピューティングエンジンで構成されています。開発者は、C、C++、FORTRAN言語を使用してCUDA™アーキテクチャ向けのプログラムを作成できます。

そのため、 CUDAの落とし穴を回避するために、多くの企業がGPUをサポートしながらモデルを簡単にコンテナ化できるソリューションを開発してきましたこのブログ記事では、 Trussというオープンソースツールを使用して、LLMを簡単にコンテナ化する方法を紹介します。

Truss を使用すると、開発者は任意のフレームワークを使用して構築されたモデルを簡単にコンテナ化およびカプセル化できます

トラスを使用する理由

トラス — https://truss.baseten.co/e2e.

Truss には、次のような多くの便利な機能があらかじめ用意されています。

  • Python モデルを、本番環境対応の API エンドポイントを備えたマイクロサービスに変換します。
  • Dockerを使用して依存関係を凍結する
  • GPU推論をサポート
  • モデルの簡単な前処理と後処理
  • 簡単かつ安全な秘密管理

以前、機械学習モデルのデプロイにTrussを使ったことがありますが、プロセスは非常にスムーズでシンプルでした。TrussDockerfileを自動的に作成し、Pythonの依存関係も管理してくれます。私たちがやるべきことは、モデルのコードを提供するだけです。

Trussのようなツールを使用する主な理由は、 GPU サポートによりモデルの展開がはるかに容易になるためです

プラン

このブログ記事で取り上げる主なポイントは次のとおりです

  1. トラスを使用してFalcon 7Bをローカルに設置する
  2. GPU をお持ちの場合 (私は RTX 3080 を持っています)、モデルをローカルで実行してください。
  3. モデルをコンテナ化しDockerを使用して実行します
  4. モデルを実行するには、 Google Cloud でGPU 対応のKubernetesクラスタを作成します。

ただし、心配する必要はありません。ステップ 2 で GPU がない場合でもクラウドでモデルを実行できます。

以下は、この記事の後半で説明するすべてのコードが含まれるGithub コード リポジトリのアドレスです(引き続き読みたい場合)

https://github.com/htrivedi99/falcon-7b-truss

さあ始めましょう!

ステップ1:Trussを使用してFalcon 7Bをローカルにセットアップする

まず、Python バージョン 3.8 以降でプロジェクトを作成する必要があります

次に、 Hugging Faceのウェブサイトからモデルをダウンロード Trussを使ってラップします。インストールする必要がある依存関係は次のとおりです。

 pip install truss

次に、 Pythonプロジェクトに main.py というスクリプトを作成します。これはトラスを処理するための一時的なスクリプトです

次に、ターミナルで次のコマンドを実行して、 Trussパッケージを設定します

 truss init falcon_7b_truss

新しいトラスを作成するように求められたら、「y」を押してください。完了すると、falcon_7b_truss という新しいディレクトリが作成されます。このディレクトリには、自動生成されたファイルとフォルダが含まれます。以下の情報を入力する必要があり、model.py はモデルフォルダ内にあり config.yamlファイルから参照されます

前述の通り、 Trussに必要なのはモデルのコードだけです。それ以外の処理はすべて自動的に行われます。コードは model.py に記述しますが、特定の形式で記述する必要があります。

Truss では、各モデルが少なくとも 3 つの関数 (__init__、load、predict) をサポートすることを期待しています。

  • __init__ は主にクラス変数を作成するために使用されます。
  • 「load」は、 Hugging Face Web サイトからモデルをダウンロードする場所です
  • `predict` はモデルを呼び出す場所です。以下は model.py の完全なコードです。
 import torch from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline from typing import Dict MODEL_NAME = "tiiuae/falcon-7b-instruct" DEFAULT_MAX_LENGTH = 128 class Model: def __init__(self, data_dir: str, config: Dict, **kwargs) -> None: self._data_dir = data_dir self._config = config self.device = "cuda" if torch.cuda.is_available() else "cpu" print("THE DEVICE INFERENCE IS RUNNING ON IS: ", self.device) self.tokenizer = None self.pipeline = None def load(self): self.tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) model_8bit = AutoModelForCausalLM.from_pretrained( MODEL_NAME, device_map="auto", load_in_8bit=True, trust_remote_code=True) self.pipeline = pipeline( "text-generation", model=model_8bit, tokenizer=self.tokenizer, torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto", ) def predict(self, request: Dict) -> Dict: with torch.no_grad(): try: prompt = request.pop("prompt") data = self.pipeline( prompt, eos_token_id=self.tokenizer.eos_token_id, max_length=DEFAULT_MAX_LENGTH, **request )[0] return {"data": data} except Exception as exc: return {"status": "error", "data": None, "message": str(exc)}

ここで何が起こったか:

  • MODEL_NAME は使用するモデルです。この場合は、Falcon-7b-instruct モデルです。
  • ロード処理では、 Hugging Faceのウェブサイトから8ビットモデルをダウンロードします。8ビットモデルを使用するのは、量子化時にGPUメモリの使用量が大幅に削減されるためです。
  • さらに、13 GB 未満の VRAM を搭載した GPU でモデルをローカルに実行する場合は、モデルを 8 ビット モードでロードする必要があります。
  • `predict` 関数は JSON リクエストを引数として受け取り、`self.pipeline` を使ってモデルを呼び出します。`torch.no_grad` は、PyTorch に学習モードではなく推論モードであることを伝えます。とてもクールですよね?モデルの設定に必要なのはこれだけです。

ステップ2: モデルをローカルで実行する(オプション)

8GB を超える VRAM を搭載した NVIDIA GPU をお持ちの場合は、モデルローカルで実行できます

そうでない場合は、次の手順に進んでください。

モデルをローカルで実行するには、追加の依存関係をダウンロードする必要があります。依存関係をダウンロードする前に、CUDAと適切なCUDAドライバーがインストールされていることを確認してください。

モデルをローカルで実行しようとしているためTruss はCUDA の強力な機能の管理をサポートできません

 pip install transformers pip install torch pip install peft pip install bitsandbytes pip install einops pip install scipy

次に、 falcon_7b_truss ディレクトリの外部に作成されたスクリプト main.py で、 Truss をロードする必要があります

以下は main.py のコードです。

 import truss from pathlib import Path import requests tr = truss.load("./falcon_7b_truss") output = tr.predict({"prompt": "Hi there how are you?"}) print(output)

ここで何が起こったか:

  • ご存知のとおり、 falcon_7b_truss ディレクトリはTrussによって自動的に作成されます。truss.load を使用すると、モデルと依存関係を含むパッケージ全体をロードできます。
  • パッケージをロードしたら、`predict`メソッドを呼び出してモデルの出力を取得し、`main.py`を実行してモデルの出力を取得できます。このモデルファイルのサイズは約15GBなので、ダウンロードには5~10分かかる場合があります。スクリプトを実行すると、次のような出力が表示されます。
 • {'data': {'generated_text': "Hi there how are you?\nI'm doing well. I'm in the middle of a move, so I'm a bit tired. I'm also a bit overwhelmed. I'm not sure how to get started. I'm not sure what I'm doing. I'm not sure if I'm doing it right. I'm not sure if I'm doing it wrong. I'm not sure if I'm doing it at all.\nI'm not sure if I'm doing it right. I'm not sure if I'm doing it wrong. I"}}

ステップ3: Dockerを使用してモデルをパッケージ化する

通常、モデルをコンテナ化してパッケージ化する場合、モデルのバイナリと Python の依存関係を取得し、Flask または Fast API サーバーを使用してパッケージ化します。

これらの多くは定型的な操作なので、自分で行う必要はありません。Trussこれらのタスクを自動的に処理します。モデルはすでに提供されており、 Trussがサーバーを作成するので、あとはPythonの依存関係を提供するだけです。

`config.yaml` ファイルにはモデルの設定が保存されています。ここでモデルへの依存関係を追加できます。設定ファイルには必要な機能のほとんどが既に含まれていますが、まだいくつか追加する必要があります。

config.yaml に追加する必要がある内容は次のとおりです。

 apply_library_patches: true bundled_packages_dir: packages data_dir: data description: null environment_variables: {} examples_filename: examples.yaml external_package_dirs: [] input_type: Any live_reload: false model_class_filename: model.py model_class_name: Model model_framework: custom model_metadata: {} model_module_dir: model model_name: Falcon-7B model_type: custom python_version: py39 requirements: - torch - peft - sentencepiece - accelerate - bitsandbytes - einops - scipy - git+https://github.com/huggingface/transformers.git resources: use_gpu: true cpu: "3" memory: 14Gi secrets: {} spec_version: '2.0' system_packages: []

そのため私たちが追加した主なコンテンツ要件を中心に展開されています。リストされているすべての依存関係は、モデルのダウンロードと実行に必要です。

もう一つ追加した重要なものは resources です。`use_gpu :true` は、 Truss にGPUサポートを有効にしたDockerfile を作成するよう指示するため、非常に重要です。これは、 tasks の設定に使用されます

次に、モデルをコンテナ化します。Dockerを使ってモデルをコンテナ化する方法がわからない場合は、ご安心ください。Trussこのサービスを提供しています。

main.py ファイルでは、 Trussにすべてをバンドルするように指示します。必要なコードは次のとおりです。

 import truss from pathlib import Path import requests tr = truss.load("./falcon_7b_truss") command = tr.docker_build_setup(build_dir=Path("./falcon_7b_truss")) print(command)

どうしたの:

  • まず、 falcon_7b_truss をロードします
  • 次に、docker_build_setup 関数が、Dockerfile の作成や Fast API サーバーのセットアップなど、すべての複雑な処理を処理します。
  • falcon_7b_truss ディレクトリを見ると、さらに多くのファイルが生成されていることがわかります。これらのファイルの動作については心配する必要はありません。すべてバックグラウンドで管理されます。
  • 実行の最後に、 DockerイメージをビルドするためのDockerコマンドが取得されます
 docker build falcon_7b_truss -t falcon-7b-model:latest

Dockerイメージをビルドしたい場合は、ビルドコマンドの実行を続けてください。イメージのサイズは約9GBなので、ビルドには時間がかかる場合がありますビルドはしたくないけれど、この記事を読み進めたい場合は提供されているイメージを詳しく見てみてください

 htrivedi05/truss-falcon-7b:latest .

イメージを自分でビルドする場合は、クラウド内のコンテナがイメージを取得できるように、タグ付けしてDocker Hubにプッシュする必要があります。イメージをビルドした後に実行する必要があるコマンドは以下のとおりです。

 docker tag falcon-7b-model <docker_user_id>/falcon-7b-model docker push <docker_user_id>/falcon-7b-model

驚くべきことに、これでクラウドでモデルを実行する準備が整いました。

[注] 以下のオプションの手順 (手順 4 まで) は、GPU を使用してイメージをローカルで実行する場合に使用します。

Nvidia GPU があり、GPU サポート付きのコンテナー化されたモデルをローカルで実行したい場合は、 Docker がGPU を使用するように設定されていることを確認する必要があります。

これを行うには、ターミナルを開いて次のコマンドを実行するだけです。

 distributinotallow=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list apt-get update apt-get install -y nvidia-docker2 sudo systemctl restart docker

DockerコンテナGPU にアクセスするように設定されたので次のように実行します

 docker run --gpus all -d -p 8080:8080 falcon-7b-model

同様に、モデルのダウンロードにも時間がかかります。すべてが正しく動作していることを確認するには、コンテナのログを確認してください。「 THE DEVICE INFERENCE IS RUNNING ON IS: cuda 」と表示されているはずです。

以下に示すように API エンドポイントを介してモデルを呼び出すことができます

 import requests data = {"prompt": "Hi there, how's it going?"} res = requests.post("http://127.0.0.1:8080/v1/models/model:predict", jsnotallow=data) print(res.json())

ステップ4: モデルを本番環境にデプロイする

ここで「本番環境」という言葉をやや曖昧な表現として使っています。Kubernetes環境、トラフィック量の変動やスケーリングが容易なためモデルをKubernetesで実行します。

とはいえ、 Kubernetes は、ネットワーク ポリシー、ストレージ、構成マッピング、負荷分散、機密性管理など、多くの構成オプションを提供します

Kubernetesは「スケーリング」と「本番」ワークロードの実行を目的として構築されています、本番環境に必要な構成の多くはすぐには利用できません。Kubernetesに関するこうした高度なトピックに関する議論はこの記事の範囲を超えており、ここで目指すところからも逸脱します。そのため、このブログ記事では、基本的なタイプの最小限のクラスターを作成します。

早速、クラスターの作成を始めましょう。

前提条件:

  1. プロジェクトを作成するための対応するGoogle Cloudアカウントを持っている
  2. gcloud CLI がコンピュータに正常にインストールされました。
  3. GPU対応コンピュータを実行するのに十分なクォータがあることを確認してください。クォータは「IAM & Admin」コマンドグループで確認できます。

GKE クラスターを作成する

クラスタの作成と管理には、 Google Kubernetes Engine を使用します。重要なポイントをいくつかご紹介します

GoogleのKubernetesエンジンは無料ではありません。Googleは強力なGPUを無料で使用することを許可してくれません。とはいえ、比較的低性能のGPUで構成されたシングルノードクラスタを構築しています。この実験にかかる費用は1~2ドル程度です。

以下は、実行するKubernetesクラスターの構成です

  • 1ノード、標準Kubernetesクラスタ
  • 1 つの Nvidia T4 GPU
  • n1-standard-4 マシン (4 つの vCPU、15 GB のメモリ)
  • これらはすべて単一のソケットインスタンス上で実行されます。

注: 別の地域にいて、まったく同じリソースにアクセスできない場合は、お気軽に変更してください。

クラスターを作成する手順:

1. Google Cloud コンソールに移動し、Kubernetes Engine というサービスを検索します

2. 「作成ボタンをクリックします

  • オートパイロットクラスターではなく、標準クラスターを作成していることを確認してくださいページ上部 Kubernetesクラスター作成と表示されるはずです

3. クラスターの基本:

  • クラスタの基本タブでは、あまり変更する必要はありません。クラスタに名前を付けるだけにしてください。リージョンやコントロールプレーンを変更する必要はありません。

4. default -pool タブをクリックし、ノードの数を 1 に変更します

5. default - pool タブの左側のサイドバーにある Nodes タブをクリックします

  • マシン構成(汎用)一般から GPU に変更します。
  • GPU タイプとして NVIDIA T4 を選択し数量を 1 に設定します。
  • GPU タイムシェアリングを有効にします(この機能を使用しない場合でも)
  • GPU あたりの共有クライアントの最大数を 8 に設定します。
  • マシンタイプとして、n1-standard-4 (4 つの vCPU、15 GB のメモリ) を選択します。
  • ブートディスクのサイズを50に変更します
  • 一番下までスクロールして、「スポット VM上のノードを有効にする」というオプションを選択します

クラスターを構成したら、このクラスターの作成進みます

Google による設定には数分かかります。クラスタが起動したら、接続する必要があります接続するには、ターミナルを開いて次のコマンドを実行してください。

 gcloud config set compute/zone us-central1-c gcloud container clusters get-credentials gpu-cluster-1

異なるクラスタ名ゾーンを使用している場合は、それらのゾーンを適宜更新してください。接続を確認するには、次のコマンドを実行してください。

 kubectl get nodes

ターミナルにノードが1つ表示されるはずです。クラスターにはGPUが搭載されていますが、必ずインストールしなければならないNvidiaドライバーがいくつか不足しています。幸い、インストールは簡単です以下のコマンドを実行してドライバーをインストールしてください

 kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml

お祝いしましょう。ついにモデルを展開する準備が整いました。

展開モデル

モデルをクラスターにデプロイするには、 Kubernetesデプロイメントを作成する必要があります。Kubernetesデプロイメントを使用するとコンテナ化されたモデルのインスタンスを管理できます。Kubernetesや YAML ファイルの記述方法については、この記事の範囲外となるため、ここでは詳しく説明しません

truss-falcon-deployment.yaml というファイルを作成する必要があります。ファイルを開き、以下の内容を貼り付けます。

 apiVersion: apps/v1 kind: Deployment metadata: name: truss-falcon-7b namespace: default spec: replicas: 1 selector: matchLabels: component: truss-falcon-7b-layer template: metadata: labels: component: truss-falcon-7b-layer spec: containers: - name: truss-falcon-7b-container image: <your_docker_id>/falcon-7b-model:latest ports: - containerPort: 8080 resources: limits: nvidia.com/gpu: 1 --- apiVersion: v1 kind: Service metadata: name: truss-falcon-7b-service namespace: default spec: type: ClusterIP selector: component: truss-falcon-7b-layer ports: - port: 8080 protocol: TCP targetPort: 8080

どうしたの:

  • Kubernetesに、 falcon-7b-modelイメージを使用してポッドを作成するように指示します。`<your_docker_id>` を実際のポッドIDに置き換えてください。独自のDockerイメージを作成しておらず、私のイメージを使用する場合は、`htrivedi05/truss-falcon-7b:latest` に置き換えてください
  • コンテナのGPUアクセスを有効にするために、リソース制限をnvidia.com/GPU:1に設定します。これにより、 Kubernetesはコンテナに対して1つのGPUのみを要求するようになります
  • モデルと対話するには、ポート8080で実行される Kubernetes サービスを作成する必要があります

ターミナルで次のコマンドを実行してデプロイメントを作成します。

 kubectl create -f truss-falcon-deployment.yaml

このコマンドを実行すると:

 kubectl get deployments

次のような画面が表示されます。

 NAME READY UP-TO-DATE AVAILABLE AGE truss-falcon-7b 0/1 1 0 8s

デプロイが準備完了状態になるまで数分かかります。コンテナを再起動するたびに、HuggingFace ページからモデルをダウンロードする必要があることに注意してください。コンテナの進行状況は、次のコマンドで確認できます。

 kubectl get pods kubectl logs truss-falcon-7b-8fbb476f4-bggts

それに応じてポッド名が変更されました。

ログで次の項目を探す必要があります。

  • 「THE DEVICE INFERENCE IS RUNNING ON IS: cuda」という印刷ステートメントは、コンテナーが GPU に正しく接続されていることを確認します。

次に、ダウンロードされるモデル ファイルに関するいくつかの print ステートメントが表示されます

 Downloading (…)model.bin.index.json: 100%|██████████| 16.9k/16.9k [00:00<00:00, 1.92MB/s] Downloading (…)l-00001-of-00002.bin: 100%|██████████| 9.95G/9.95G [02:37<00:00, 63.1MB/s] Downloading (…)l-00002-of-00002.bin: 100%|██████████| 4.48G/4.48G [01:04<00:00, 69.2MB/s] Downloading shards: 100%|██████████| 2/2 [03:42<00:00, 111.31s/it][01:04<00:00, 71.3MB/s]

モデルをダウンロードしてマイクロサービスを作成すると、ログの最後に次の出力が表示されます。

 {"asctime": "2023-06-29 21:40:40,646", "levelname": "INFO", "message": "Completed model.load() execution in 330588 ms"}

このメッセージに基づいて、モデルがロードされ、推論タスクの準備ができていることを確認できます

モデル推論

モデルを直接呼び出すことはできません代わりに、モデルのサービスを呼び出す必要があります

サービス名を取得するには、次のコマンドを実行します

 kubectl get svc

出力は次のようになります。

 AME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.80.0.1 <none> 443/TCP 46m truss-falcon-7b-service ClusterIP 10.80.1.96 <none> 8080/TCP 6m19s

truss-falcon-7b サービスにアクセスしたいので、以下のコマンドでポート転送を設定する必要があります。

 kubectl port-forward svc/truss-falcon-7b-service 8080

出力は次のようになります。

 Forwarding from 127.0.0.1:8080 -> 8080 Forwarding from [::1]:8080 -> 8080

素晴らしいですね。モデルは127.0.0.1:8080のREST APIエンドポイントとして提供されています。main.pyなどのPythonスクリプトを開き、以下のコードを実行してください。

 import requests data = {"prompt": "Whats the most interesting thing about a falcon?"} res = requests.post("http://127.0.0.1:8080/v1/models/model:predict", jsnotallow=data) print(res.json())

出力は次のようになります。

{'data': {'generated_text': 'Whats the most interesting thing about a falcon?\nFalcons are known for their incredible speed and agility in the air, as well as their impressive hunting skills. They are also known for their distinctive feathering, which can vary greatly depending on the species.'}}

すごい! Falcon 7Bモデルをコンテナ化し、本番環境にマイクロサービスとしてデプロイすることに成功しました

モデルによって返されたコンテンツを表示するには、さまざまなプロンプトを使用できます。

クラスターをシャットダウンする

Falcon 7B を楽しんだら、次のコマンドを実行してデプロイメントを削除できます。

 kubectl delete -f truss-falcon-deployment.yaml

次に、 Google Cloud のKubernetesエンジンに移動し Kubernetesクラスタを削除します。

注: 特に記載がない限りこの記事すべての画像著者から提供されています

結論は

ChatGPT のような本番環境レベルのモデルの実行と管理は簡単ではありませんが時間の経過とともに、開発者はモデルをクラウドにデプロイできるようになります。

このブログ記事では、LLMを本番環境にデプロイするために必要な基本レベルをすべて説明しました。まとめると、まずTrussを使用してモデルをパッケージ化し次にDockerを使用してコンテナ化し最後にKubernetesを使用してクラウドにデプロイする必要がありました詳細を説明すると多くの作業が必要になることは承知しており決して簡単な作業ではありませんでしたが、私たちはそれを実現しました。

最後に、このブログ記事から何か興味深いことを学んでいただけたら幸いです。読んでいただきありがとうございました!

翻訳者紹介

Zhu Xianzong 氏は、51CTO コミュニティ エディター、51CTO 専門ブロガー兼講師、維坊の大学のコンピューター教師、そしてフリー プログラミング コミュニティのベテランです。

原題: Falcon-7B の生産への導入、著者: Het Trivedi