Skip to content

ClasCat® AI Research

クラスキャット – 生成 AI, AI エージェント, MCP

Menu
  • ホーム
    • ClassCat® AI Research ホーム
    • クラスキャット・ホーム
  • OpenAI API
    • OpenAI Python ライブラリ 1.x : 概要
    • OpenAI ブログ
      • GPT の紹介
      • GPT ストアの紹介
      • ChatGPT Team の紹介
    • OpenAI platform 1.x
      • Get Started : イントロダクション
      • Get Started : クイックスタート (Python)
      • Get Started : クイックスタート (Node.js)
      • Get Started : モデル
      • 機能 : 埋め込み
      • 機能 : 埋め込み (ユースケース)
      • ChatGPT : アクション – イントロダクション
      • ChatGPT : アクション – Getting started
      • ChatGPT : アクション – アクション認証
    • OpenAI ヘルプ : ChatGPT
      • ChatGPTとは何ですか?
      • ChatGPT は真実を語っていますか?
      • GPT の作成
      • GPT FAQ
      • GPT vs アシスタント
      • GPT ビルダー
    • OpenAI ヘルプ : ChatGPT > メモリ
      • FAQ
    • OpenAI ヘルプ : GPT ストア
      • 貴方の GPT をフィーチャーする
    • OpenAI Python ライブラリ 0.27 : 概要
    • OpenAI platform
      • Get Started : イントロダクション
      • Get Started : クイックスタート
      • Get Started : モデル
      • ガイド : GPT モデル
      • ガイド : 画像生成 (DALL·E)
      • ガイド : GPT-3.5 Turbo 対応 微調整
      • ガイド : 微調整 1.イントロダクション
      • ガイド : 微調整 2. データセットの準備 / ケーススタディ
      • ガイド : 埋め込み
      • ガイド : 音声テキスト変換
      • ガイド : モデレーション
      • ChatGPT プラグイン : イントロダクション
    • OpenAI Cookbook
      • 概要
      • API 使用方法 : レート制限の操作
      • API 使用方法 : tiktoken でトークンを数える方法
      • GPT : ChatGPT モデルへの入力をフォーマットする方法
      • GPT : 補完をストリームする方法
      • GPT : 大規模言語モデルを扱う方法
      • 埋め込み : 埋め込みの取得
      • GPT-3 の微調整 : 分類サンプルの微調整
      • DALL-E : DALL·E で 画像を生成して編集する方法
      • DALL·E と Segment Anything で動的マスクを作成する方法
      • Whisper プロンプティング・ガイド
  • Gemini API
    • Tutorials : クイックスタート with Python (1) テキスト-to-テキスト生成
    • (2) マルチモーダル入力 / 日本語チャット
    • (3) 埋め込みの使用
    • (4) 高度なユースケース
    • クイックスタート with Node.js
    • クイックスタート with Dart or Flutter (1) 日本語動作確認
    • Gemma
      • 概要 (README)
      • Tutorials : サンプリング
      • Tutorials : KerasNLP による Getting Started
  • Keras 3
    • 新しいマルチバックエンド Keras
    • Keras 3 について
    • Getting Started : エンジニアのための Keras 入門
    • Google Colab 上のインストールと Stable Diffusion デモ
    • コンピュータビジョン – ゼロからの画像分類
    • コンピュータビジョン – 単純な MNIST convnet
    • コンピュータビジョン – EfficientNet を使用した微調整による画像分類
    • コンピュータビジョン – Vision Transformer による画像分類
    • コンピュータビジョン – 最新の MLPモデルによる画像分類
    • コンピュータビジョン – コンパクトな畳込み Transformer
    • Keras Core
      • Keras Core 0.1
        • 新しいマルチバックエンド Keras (README)
        • Keras for TensorFlow, JAX, & PyTorch
        • 開発者ガイド : Getting started with Keras Core
        • 開発者ガイド : 関数型 API
        • 開発者ガイド : シーケンシャル・モデル
        • 開発者ガイド : サブクラス化で新しい層とモデルを作成する
        • 開発者ガイド : 独自のコールバックを書く
      • Keras Core 0.1.1 & 0.1.2 : リリースノート
      • 開発者ガイド
      • Code examples
      • Keras Stable Diffusion
        • 概要
        • 基本的な使い方 (テキスト-to-画像 / 画像-to-画像変換)
        • 混合精度のパフォーマンス
        • インペインティングの簡易アプリケーション
        • (参考) KerasCV – Stable Diffusion を使用した高性能画像生成
  • TensorFlow
    • TF 2 : 初級チュートリアル
    • TF 2 : 上級チュートリアル
    • TF 2 : ガイド
    • TF 1 : チュートリアル
    • TF 1 : ガイド
  • その他
    • 🦜️🔗 LangChain ドキュメント / ユースケース
    • Stable Diffusion WebUI
      • Google Colab で Stable Diffusion WebUI 入門
      • HuggingFace モデル / VAE の導入
      • LoRA の利用
    • Diffusion Models / 拡散モデル
  • クラスキャット
    • 会社案内
    • お問合せ
    • Facebook
    • ClassCat® Blog
Menu

TensorFlow : Extend : TensorFlow アーキテクチャ

Posted on 04/01/2017 by Sales Information

TensorFlow : Extend : TensorFlow アーキテクチャ (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 04/01/2017

* 本ページは、TensorFlow の本家サイトの Extend – TensorFlow Architecture を翻訳した上で
適宜、補足説明したものです:
    https://www.tensorflow.org/extend/architecture
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

序

私たちは TensorFlow をラージ・スケール分散トレーニングと推論のために設計しましたが、新しい機械学習モデルとシステムレベルの最適化の実験をサポートするに十分に柔軟でもあります。

このドキュメントはスケールと柔軟性の組み合わせを可能にするシステム・アーキテクチャについて説明します。貴方が計算グラフ、演算、そしてセッションのような TensorFlow プログラミング・コンセプトについて基本的な知識があることを仮定しています。これらのトピックへの序論については TensorFlow で始めましょう を見てください。分散 TensorFlow についての幾らかの知識もまた手助けとなります。

このドキュメントは、現在の API ではサポートされていない何某かの方法で TensorFlow を拡張することを望む開発者、TensorFlow のために最適化することを望むハードウェア技術者、スケーリングと分散で動作する機械学習システムの実装者、あるいは TensorFlow 内部を見ることを望む任意の人のためのものです。読んだ後にはコア TensorFlow コードを読んで変更するに十分なほど TensorFlow アーキテクチャを良く理解するはずです。

 

概要

TensorFlow ランタイムはクロスプラットフォーム・ライブラリです。Figure 1 はその概略的なアーキテクチャを図示しています。C API は異なる言語のユーザレベル・コードをコア・ランタイムから分離します。


Figure 1

このドキュメントは次の層にフォーカスします :

  • クライアント :
  • 計算をデータフロー・グラフとして定義する。
  • session を使用してグラフ実行を初期化する。
  • 分散マスター
  • Session.run() への引数で定義されるように、グラフから特定のサブグラフを切り取る。
  • サブグラフを異なるプロセスとデバイスで動作する複数のピースに分割する。
  • ワーカー・サービスへグラフ・ピースを分散させる。
  • ワーカー・サービスによるグラフ・ピース実行を初期化する。
  • ワーカー・サービス (各タスクのために一つ)
  • 利用可能なハードウェア (CPU, GPU, etc.) に適当なカーネル実装を使用してグラフ演算の実行をスケジュールする。
  • 他のワーカーサービスへ/から演算結果を送る/受け取る。
  • カーネル実装
  • 個々のグラフ演算のために計算を実行する。

Figure 2 はこれらのコンポーネントの相互作用を図示しています。”/job:worker/task:0″ と “/job:ps/task:0″ は両者ともワーカーサービスのタスクです。”PS” は “パラメータ・サーバ” を表します : モデルのパラメータを保持して更新する責任を持つタスクです。他のタスクはパラメータを最適化する動作をしている時にこれらのパラメータに更新を送ります。タスク間の仕事の特定の分担は必要ではありませんが、分散トレーニングでは一般的です。


Figure 2

分散マスターとワーカー・サービスは分散 TensorFlow でのみ存在することに注意してください。TensorFlow のシングル-プロセス版は、分散マスターが行なう全てを行ないながらローカルプロセスでデバイスと通信するのみという特別な Session 実装を含みます。

次のセクションではコア TensorFlow 層をより詳細に説明してサンプル・グラフの処理を通り抜けます。

 

クライアント

ユーザは、計算グラフを構築するクライアント TensorFlow プログラムを書きます。このプログラムは個々の演算を直接構成することもできますし Estimators API のような便利なライブラリを使用してニューラルネットワーク層と他の高位抽象を構成することもできます。TensorFlow は複数のクライアント言語をサポートし、私たちは Python と C++ を優先してきました、何故ならば内部ユーザがこれらの言語に最も精通しているからです。特徴がより確立された時には、典型的にはそれらを C++ に移植し、その結果ユーザは全てのクライアント言語から最適化された実装にアクセスできます。トレーニング・ライブラリの多くは依然として Python-only ですが、C++ は効率的な推論をサポートします。

クライアントは session を作成します、これはグラフ定義を分散マスターに tf.GraphDef protocol buffer として送ります。クライアントがグラフのノードあるいはノード群を評価する時、その評価は分散マスターへの呼び出しのトリガーとなり計算を初期化します。

Figure 3 では、クライアントはグラフを構築します、これは重み (w) を特徴ベクトル (x) に適用し、バイアス項 (b) を加算しそして結果を変数 (s) に保存します。


Figure 3

コード

  • tf.Session

 

分散マスター

分散マスター :

  • クライアントから要求されたノードを評価するために必要なサブグラフを得るためにグラフを切り取り、
  • 関係する各デバイスのためにグラフ・ピースを得るためにグラフを分割し、そして
  • 後続のステップで再利用できるようにこれらのピースをキャッシュします。

マスターはステップのための計算全体を見るので、それは共通部分式除去 (common subexpression elimination) と定数畳み込み (constant folding) のような標準的な最適化を提供します。そしてそれはタスクのセットに渡って最適化されたサブグラフの実行を調整します。


Figure 4

Figure 5 はサンプル・グラフの可能な分割を示しています。分散マスターはモデル・パラメータをグループ化します、パラメータ・サーバ上にそれらを一緒に置くためにです。


Figure 5

グラフ・エッジは分割によりカットされ、分散マスターは send と receive ノードを挿入して分散タスク間で情報を渡します (Figure 6)。


Figure 6

分散マスターはそしてグラフ・ピースを分散タスクへ送ります。


Figure 7

コード

  • MasterService API 定義
  • Master インターフェイス

 

ワーカー・サービス

各タスクのワーカー・サービスは :

  • マスターからのリクエストを処理し、
  • ローカル・サブグラフを含む演算のためのカーネル実行をスケジュールし、そして
  • タスク間の直接通信を調整します。

大きなグラフを小さなオーバーヘッドで実行するためにワーカーサービスを最適化します。現在の実装では秒毎に何万ものサブグラフが実行可能で、迅速な、きめ細かい訓練ステップを行なうための数多くのレプリカを有効にします。ワーカー・サービスはカーネルをローカルデバイスにディスパッチして可能な時にはカーネルを並列に実行します、例えば複数の CPU コアあるいは GPU ストリームを使用することによってです。

Send と Recv 演算は送信元と送信先のデバイスタイプの各ペアのために特化します :

  • ローカル CPU と GPU デバイス間の転送は cudaMemcpyAsync() API を使用して計算とデータ転送をオーバーラップさせます。
  • 2つのローカル GPU 間の転送は peer-to-peer DMA を使用し、ホスト CPU 経由の高価なコピーを回避します。

タスク間の転送のためには、TensorFlow は複数プロトコルを使用し、以下を含みます :

  • gRPC over TCP.
  • RDMA over Converged Ethernet.

マルチ-GPU 通信のための NVIDIA’s NCCL のための予備的サポートも持ちます (tf.contrib.nccl 参照)。


Figure 8

コード

  • WorkerService API 定義
  • ワーカー・インターフェイス
  • Remote rendezvous (Send と Recv 実装のため)

 

カーネル実装

ランタイムは 200 標準演算以上を含み、数学的、配列操作、制御フロー、そして状態管理演算を含みます。これらの演算の各々は様々なデバイスに最適化されたカーネル実装を持つことができます。演算カーネルの多くは Eigen::Tensor を使用して実装されています、これはマルチコア CPU と GPU のための効率的な並列コードを生成するために C++ テンプレートを使用します ; けれども、私たちは cuDNN のようなライブラリも自在に使用しそこではより効率的なカーネル実装が可能です。更にまた 量子化 も実装しました、これはモバイルデバイスと高スループットなデータセンター・アプリケーションのような環境でより高速な推論を可能にします、そして量子化された計算を高速化するために gemmlowp 低精度行列ライブラリを使用します。

サブ計算を演算の合成として表現することは難しくあるいは非効率で、ユーザは C++ で書かれた効率的な実装を提供する追加のカーネルを登録できます。例えば、ReLU と Sigmoid 活性化関数とそれらの該当する勾配のような、あるパフォーマンス・クリティカルな演算のための貴方自身の融合カーネルを登録することを推奨しています。XLA コンパイラ は自動カーネル融合の実験的な実装を持ちます。

コード

  • OpKernel インターフェイス
 

以上

クラスキャット

最近の投稿

  • LangGraph 0.5 on Colab : Get started : クイックスタート
  • LangGraph on Colab : SQL エージェントの構築
  • LangGraph on Colab : マルチエージェント・スーパーバイザー
  • LangGraph on Colab : エージェント型 RAG
  • LangGraph : 例題 : エージェント型 RAG

タグ

AutoGen (13) ClassCat Press Release (20) ClassCat TF/ONNX Hub (11) DGL 0.5 (14) Eager Execution (7) Edward (17) FLUX.1 (16) Gemini (20) HuggingFace Transformers 4.5 (10) HuggingFace Transformers 4.6 (7) HuggingFace Transformers 4.29 (9) Keras 2 Examples (98) Keras 2 Guide (16) Keras 3 (10) Keras Release Note (17) Kubeflow 1.0 (10) LangChain (45) LangGraph (24) MediaPipe 0.8 (11) Model Context Protocol (16) NNI 1.5 (16) OpenAI Agents SDK (8) OpenAI Cookbook (13) OpenAI platform (10) OpenAI platform 1.x (10) OpenAI ヘルプ (8) TensorFlow 2.0 Advanced Tutorials (33) TensorFlow 2.0 Advanced Tutorials (Alpha) (15) TensorFlow 2.0 Advanced Tutorials (Beta) (16) TensorFlow 2.0 Guide (10) TensorFlow 2.0 Guide (Alpha) (16) TensorFlow 2.0 Guide (Beta) (9) TensorFlow 2.0 Release Note (12) TensorFlow 2.0 Tutorials (20) TensorFlow 2.0 Tutorials (Alpha) (14) TensorFlow 2.0 Tutorials (Beta) (12) TensorFlow 2.4 Guide (24) TensorFlow Deploy (8) TensorFlow Get Started (7) TensorFlow Graphics (7) TensorFlow Probability (9) TensorFlow Programmer's Guide (22) TensorFlow Release Note (18) TensorFlow Tutorials (33) TF-Agents 0.4 (11)
2017年4月
月 火 水 木 金 土 日
 12
3456789
10111213141516
17181920212223
24252627282930
« 3月   5月 »
© 2025 ClasCat® AI Research | Powered by Minimalist Blog WordPress Theme