|
翻訳者|朱賢宗 校正者 | 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を使ったことがありますが、プロセスは非常にスムーズでシンプルでした。TrussはDockerfileを自動的に作成し、Pythonの依存関係も管理してくれます。私たちがやるべきことは、モデルのコードを提供するだけです。 Trussのようなツールを使用する主な理由は、 GPU サポートによりモデルの展開がはるかに容易になるためです。 プランこのブログ記事で取り上げる主なポイントは次のとおりです。 - トラスを使用してFalcon 7Bをローカルに設置する
- GPU をお持ちの場合 (私は RTX 3080 を持っています)、モデルをローカルで実行してください。
- モデルをコンテナ化し、 Dockerを使用して実行します。
- モデルを実行するには、 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に関するこうした高度なトピックに関する議論はこの記事の範囲を超えており、ここで目指すところからも逸脱します。そのため、このブログ記事では、基本的なタイプの最小限のクラスターを作成します。 早速、クラスターの作成を始めましょう。 前提条件:- プロジェクトを作成するための対応するGoogle Cloudアカウントを持っている
- gcloud CLI がコンピュータに正常にインストールされました。
- 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
|