バイトダンスモデル大規模展開実戦
1. 背景の紹介
ByteDance では、ディープラーニングをベースにしたアプリケーションが随所で開花しており、エンジニアはモデルの効果に注目する一方で、オンライン サービスにも注意を払う必要があります一貫性とパフォーマンス。初期の頃、これには通常、アルゴリズムの専門家とエンジニアリングの専門家の間の分業と密接な協力が必要でした。このモデルには、差分トラブルシューティングや検証などの比較的高いコストがかかります。
PyTorch/TensorFlow フレームワークの人気により、深層学習モデルのトレーニングとオンライン推論が統合されました。開発者は、特定のアルゴリズム ロジックに注意を払い、フレームワークの Python API を呼び出すだけでトレーニングを完了できます。その後、モデルをシリアル化してエクスポートするのが非常に便利で、推論作業は統合された高性能 C エンジンによって完了します。トレーニングから展開までの開発者のエクスペリエンスが向上します。
ただし、完成したサービスには通常、前処理/後処理などの多くのビジネス ロジックが含まれており、このタイプのロジックでは通常、さまざまな入力を処理して Tensor に変換し、モデルに入力します。 、モデル出力 Tensor はターゲット形式に処理されます。いくつかの典型的なシナリオは次のとおりです。
- ##私たちの目標は、上記のエンドツーエンドのプロセスに自動化および統合されたトレーニングと推論ソリューションを提供し、推論プロセスの手動開発などの一連の問題を軽減することです。とアライメントの差分を分析し、大規模な統合導入ソリューションを実現します。
- 2. 主要な問題
PyTorch/TensorFlow などのフレームワークは、統合されたモデルのトレーニング/推論の問題を比較的解決しているため、モデルの計算自体にはトレーニングと推論の統合という問題はありません (オペレータのパフォーマンスの最適化については、この説明の範囲外です)。
このタイプのロジックの場合、TensorFlow 2.x は tf.function (まだ完成していません) を提供し、PyTorch は例外なくネイティブ Python 構文のサブセットを選択する TorchScript を提供します。しかし、たとえ非常に強力であっても、依然として無視できない問題があります:
さらに、非対応のタイプも多数あります。 - 深層学習タスク。たとえば、シーケンス アノテーション、言語モデルのデコード、ツリー モデルの人工特徴構築など、自然言語処理には依然として多くの非深層学習アプリケーションやサブタスクが存在します。これらは通常、より柔軟な特徴パラダイムを備えています。エンドツーエンドの統合されたトレーニングとプロモーションのソリューションには、依然として多くの開発と正確性の検証作業が必要です。
上記の問題を解決するために、コンパイルに基づいた前処理ソリューション MATXScript を開発しました。
- 3. MATXScript
- ディープ ラーニング アルゴリズムの開発では、開発者は通常、迅速な反復と実験に Python を使用する一方、C を使用して正確性チェックサムを含む高性能オンライン サービスを開発します。負担が重くなる!
- MatxScript (https://github.com/bytedance/matxscript) は、Python サブ言語用の AOT コンパイラーであり、Python を C に自動的に変換し、ワンクリックでパッケージ化および公開する機能を提供します。 MATXScript を使用すると、開発者はモデルを迅速に反復しながら、低コストで高パフォーマンスのサービスを展開できます。
コア アーキテクチャは次のとおりです:
- 最下層は純粋な C/CUDA 基本ライブラリで、高性能オペレーターの専門家によって開発されました。
- 基本ライブラリに加えて、Python ライブラリが規則に従ってカプセル化されており、トレーニング プロセスで使用できます。
- 推論が必要な場合は、MATXScript を使用して Python コードを同等の C コードに変換し、それをダイナミック リンク ライブラリにコンパイルし、モデルとその他の依存リソースを追加して、パッケージ化して一緒に公開できます。
その中でもコンパイラの役割は非常に重要であり、その中心的なプロセスは次のとおりです。
上記のプロセスを通じて、ユーザーが作成した前処理コードはパイプラインで JitOp にコンパイルされます。前処理と後処理をモデルとリンクするために、トレース システムも開発しました (インターフェイスの設計は PyTorch を参照しています)。アーキテクチャは次のとおりです。
MATXScript に基づいて、トレーニングと推論に同じコード セットを使用できるため、モデル展開のコストが大幅に削減されます。同時に, アーキテクチャとアルゴリズムは分離されており, アルゴリズムの学生は完全に Python で作業できます. アーキテクチャの学生はコンパイラ開発とランタイムの最適化に焦点を当てます. ByteDance では, このソリューションは大規模な導入によって検証されています!
4. 小さなテスト
MATXScript の使用方法を示す例として、最も単純な英語テキストの前処理を示します。
目標: 英語テキストの一部をインデックスに変換する
- 基本的な辞書検索ロジックを作成する
class Text2Ids: def __init__(self) -> None: self.table: Dict[str, int] = { "hello": 0, "world": 1, "[UNK]": 2, } def lookup(self, word: str) return self.table.get(word, 2) def__call__ (self, words: List[str]) return [self.lookup(w) for w in words]
- パイプラインを作成する
import matx class WorkFlow: def __init__(self): # 此处会进行代码编译,Python 代码自动编译封装为 Callable 对象 self.text2ids = matx.script(Text2Ids)() def process(self, texts): ids = self.text2ids(texts) return ids # test handler = WorkFlow() print(handler.process("hello world unknown")) # output: [0, 1, 2]
- トレース ディスクへのエクスポート
# dump mod = matx.trace(handler.process, "hello world") print(mod.run({"texts": "hello world"})) mod.save('./my_dir') # load mod = matx.load('./my_dir', -1) print(mod.run({"texts": "hello world"}))
- C Load
#include <string> #include <vector> #include <map> #include <iostream> #include <matxscript/pipeline/tx_session.h> using namespace ::matxscript::runtime; int main() { // test case std::unordered_map<std::string, RTValue> feed_dict; feed_dict.emplace("texts", Unicode(U"hello world")); std::vector<std::pair<std::string, RTValue>> result; const char* module_path = "./my_dir"; const char* module_name = "model.spec.json"; { // -1 mean cpu auto sess = TXSession::Load(module_path, module_name, -1); auto result = sess->Run(feed_dict); for (auto& r : result) { std::cout << "key: " << r.first << ", value: " << r.second << std::endl; } } return 0; }
完全なコードについては、https://github を参照してください。 .com/bytedance/matxscript/tree/main/examples/text2ids
要約: 上記は純粋な Python で実装された非常に単純な前処理ロジックであり、一般的な C コードでロードして実行できます。モデル 実際のマルチモーダルなエンドツーエンドのケースを示します。
5. マルチモーダルのケース
ここでは、グラフィック マルチモーダル (Bert Resnet) を例として取り上げます。モデルは、トレーニングとデプロイにおける実際の作業を示すために、PyTorch を使用して作成されています。
- 環境の構成
a. gcc/cuda およびその他のインフラストラクチャの構成 (通常、運用および保守の学生がこれをすでに行っています)
b. MATXScript とそれに基づいて開発された基本ライブラリをインストールします(テキスト、ビジョンなど) - モデル コードを記述します
a. ここでは省略していますが、論文やその他のオープン ソース実装を参照して自分で行うことができます - 前処理コードを記述します
a . text
from typing import List, Dict, Tuple import libcut import matx class Vocabulary: ... def utf8_decoder(s: List[bytes]): return [x.decode() for x in s] class TextNDArrayBuilder: ... class TextPipeline: def __init__(self, mode: str = "eval"): self.mode = mode self.cut_engine = libcut.Cutter('/path/to/cut_models', ...) self.vocab = matx.script(Vocabulary)('/path/to/vocab.txt') self.decoder = matx.script(utf8_decoder) self.input_builder = matx.script(TextNDArrayBuilder)(self.vocab) def process(self, text: List[bytes]): # List[bytes] 是对齐 C++ 的 vector<string> text: List[str] = self.decoder(text) words: List[List[str]] = self.cut_engine(text) batch_ids: List[List[int]] = self.vocab(words) input_ids, segment_ids, mask_ids = self.input_builder(batch_ids, 32) if self.mode == "train": return input_ids.torch(), segment_ids.torch(), mask_ids.torch() return input_ids, segment_ids, mask_ids
b.vision
from typing import List, Dict, Tuple import matx from matx import vision class VisionPipeline: def __init__(self, device_id: int = 0, mode: str = "eval", image_size: int = 224,): self.is_training = mode == 'train' self.mode = mode ... def process(self, image,): if self.is_training: decode_nds = self.random_crop_decode(image) flip_nds = self.random_flip(decode_nds) resize_nds = self.resize(flip_nds) transpose_nd = self.transpose_norm(resize_nds, vision.SYNC) else: decode_nds = self.decode(image) resize_nds = self.resize(decode_nds) crop_nds = self.center_crop(resize_nds) transpose_nd = self.transpose_norm(crop_nds, vision.SYNC) if self.mode == "trace": return transpose_nd return transpose_nd.torch()
- DataLoader に接続
a. TextPipeline は通常の Python クラスとして使用でき、Dataset に接続できます
b. VisionPipeline には GPU 前処理が含まれており、バッチ処理に適しています。自分で別の DataLoader を構築する必要があります (ここでポイントを埋め、後で ByteDance の内部マルチスレッド DataLoader をオープンソースします) - 追加モデル コードを入力してトレーニングを開始する Bar
- エンドツーエンドの推論モデルをエクスポートする
class MultimodalEvalPipeline: def __init__(self): self.text_pipe = TextPipeline(mode="eval", ...) self.vision_pipe = VisionPipeline(mode="eval", ...) self.torch_model = torch.jit.load('/path/to/multimodal.jit', map_locatinotallow='cuda:0') self.tx_model_op = matx.script(self.torch_model, device=0) def eval(self, texts: List[bytes], images: List[bytes]) input_ids, segment_ids, mask_ids = self.text_pipe.process(texts) images = self.vision_pipe.process(images) scores = self.tx_model_op(input_ids, segment_ids, mask_ids, images) return scores # examples example_batch_size = 8 text_examples = ['hello, world'.encode()] * example_batch_size with open('/path/image.jpg', 'rb') as f: image_example = f.read() image_examples = [image_example] * example_batch_size # pipeline instance pipe = MultimodalEvalPipeline(...) mod = matx.trace(pipe.eval, text_examples, image_examples) # test print(mod.run({"texts": text_examples, "images": image_examples})) # save mod.save('/path/to/my_multimodal')
概要: 上記の手順を完了すると、エンドツーエンドのトレーニングとトレーニングを完了できます。リリース作業、およびプロセス全体は純粋な Python コードで完了し、アルゴリズムを学生自身が完全に制御できます。もちろん、モデル計算自体にパフォーマンスの問題がある場合は、画像の自動変更と最適化によってバックグラウンドで完了することもできます。
注: 完全なコード例については、https://github.com/bytedance/matxscript/tree/main/examples/e2e_multi_modal
6 を参照してください。前 この章では、アルゴリズムのクラスメイトがリリースしたモデル パッケージを入手し、それを統合サービスを使用してロードして実行する方法について説明します。
完全なサーバーには次のものが含まれます: IDL プロトコル、バッチ処理戦略、スレッド/スレッドのスケジューリングと配置、モデル推論...
ここではモデル推論についてのみ説明します。その他は開発可能です。合意に従って。 main 関数を使用して、モデルのロードと実行のプロセスを示します。
#include <string> #include <vector> #include <map> #include <iostream> #include <matxscript/pipeline/tx_session.h> using namespace ::matxscript::runtime; int main() { // test case std::unordered_map<std::string, RTValue> feed_dict; feed_dict.emplace("texts", List({String("hello world")})); feed_dict.emplace("images", List({String("......")})); std::vector<std::pair<std::string, RTValue>> result; const char* module_path = "/path/to/my_multimodal"; const char* module_name = "model.spec.json"; { // cuda:0 auto sess = TXSession::Load(module_path, module_name, 0); auto result = sess->Run(feed_dict); for (auto& r : result) { std::cout << "key: " << r.first << ", value: " << r.second << std::endl; } } return 0; }
上記のコードは、C でマルチモーダル モデルをロードする最も単純なケースです。サーバーを開発する学生の場合、次のことを実行するだけで済みます。単純な抽象化と規約を通じて、上記のコードは統一された C モデル サービス フレームワークに変換できます。
7. 詳細情報
私たちは Bytedance-AML-機械学習システム チームであり、統一された高パフォーマンスのトレーニングとプロモーションの統合フレームワークを企業に提供することに尽力しています。 Volcano Engine Machine Learning Platform を通じてパートナー企業にサービスを提供する予定で、Volcano Engine Machine Learning Platform は 2023 年から、プリセットのミラー環境、共通シナリオの公開サンプル、企業のアクセスおよび使用時の技術サポートなどの MATX 関連サポートを提供する予定です。など、トレーニングと推論のシナリオの高速化と統合を低コストで実現できます。弊社製品の詳細については、https://www.volcengine.com/product/ml-platform をご覧ください。
以上がバイトダンスモデル大規模展開実戦の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











以前に書きましたが、今日は、深層学習テクノロジーが複雑な環境におけるビジョンベースの SLAM (同時ローカリゼーションとマッピング) のパフォーマンスをどのように向上させることができるかについて説明します。ここでは、深部特徴抽出と深度マッチング手法を組み合わせることで、低照度条件、動的照明、テクスチャの弱い領域、激しいセックスなどの困難なシナリオでの適応を改善するように設計された多用途のハイブリッド ビジュアル SLAM システムを紹介します。当社のシステムは、拡張単眼、ステレオ、単眼慣性、ステレオ慣性構成を含む複数のモードをサポートしています。さらに、他の研究にインスピレーションを与えるために、ビジュアル SLAM と深層学習手法を組み合わせる方法も分析します。公開データセットと自己サンプリングデータに関する広範な実験を通じて、測位精度と追跡堅牢性の点で SL-SLAM の優位性を実証しました。

2006 年にディープ ラーニングの概念が提案されてから、ほぼ 20 年が経過しました。ディープ ラーニングは、人工知能分野における革命として、多くの影響力のあるアルゴリズムを生み出してきました。では、ディープラーニングのトップ 10 アルゴリズムは何だと思いますか?私の考えでは、ディープ ラーニングのトップ アルゴリズムは次のとおりで、いずれもイノベーション、アプリケーションの価値、影響力の点で重要な位置を占めています。 1. ディープ ニューラル ネットワーク (DNN) の背景: ディープ ニューラル ネットワーク (DNN) は、多層パーセプトロンとも呼ばれ、最も一般的なディープ ラーニング アルゴリズムです。最初に発明されたときは、コンピューティング能力のボトルネックのため疑問視されていました。最近まで長年にわたる計算能力、データの爆発的な増加によって画期的な進歩がもたらされました。 DNN は、複数の隠れ層を含むニューラル ネットワーク モデルです。このモデルでは、各層が入力を次の層に渡し、

今日の急速な技術変化の波の中で、人工知能 (AI)、機械学習 (ML)、および深層学習 (DL) は輝かしい星のようなもので、情報技術の新しい波をリードしています。これら 3 つの単語は、さまざまな最先端の議論や実践で頻繁に登場しますが、この分野に慣れていない多くの探検家にとって、その具体的な意味や内部のつながりはまだ謎に包まれているかもしれません。そこで、まずはこの写真を見てみましょう。ディープラーニング、機械学習、人工知能の間には密接な相関関係があり、進歩的な関係があることがわかります。ディープラーニングは機械学習の特定の分野であり、機械学習

最近、DiffusionModel は画像生成の分野で大きな進歩を遂げ、画像生成およびビデオ生成タスクに前例のない開発機会をもたらしました。素晴らしい結果にもかかわらず、拡散モデルの推論プロセスに固有のマルチステップ反復ノイズ除去特性により、計算コストが高くなります。最近、拡散モデルの推論プロセスを高速化する一連の拡散モデル蒸留アルゴリズムが登場しました。これらの方法は、大きく 2 つのカテゴリに分類できます: i) 軌道保存蒸留、ii) 軌道再構築蒸留。ただし、これら 2 種類の方法は、効果の上限や出力領域の変更によって制限されます。これらの問題を解決するために、ByteDance 技術チームは Hyper-SD と呼ばれる軌跡セグメンテーションの一貫した方法を提案しました。

エディター | Radish Skin 2021 年の強力な AlphaFold2 のリリース以来、科学者はタンパク質構造予測モデルを使用して、細胞内のさまざまなタンパク質構造をマッピングし、薬剤を発見し、既知のあらゆるタンパク質相互作用の「宇宙地図」を描いてきました。ちょうど今、Google DeepMind が AlphaFold3 モデルをリリースしました。このモデルは、タンパク質、核酸、小分子、イオン、修飾残基を含む複合体の結合構造予測を実行できます。 AlphaFold3 の精度は、これまでの多くの専用ツール (タンパク質-リガンド相互作用、タンパク質-核酸相互作用、抗体-抗原予測) と比較して大幅に向上しました。これは、単一の統合された深層学習フレームワーク内で、次のことを達成できることを示しています。

6月13日のニュースによると、Byteの「Volcano Engine」公開アカウントによると、Xiaomiの人工知能アシスタント「Xiao Ai」はVolcano Engineとの協力に達し、両社はbeanbao大型モデルに基づいて、よりインテリジェントなAIインタラクティブ体験を実現するとのこと。 。 ByteDance が作成した大規模な豆包モデルは、毎日最大 1,200 億のテキスト トークンを効率的に処理し、3,000 万個のコンテンツを生成できると報告されています。 Xiaomi は、Doubao 大型モデルを使用して、独自モデルの学習能力と推論能力を向上させ、ユーザーのニーズをより正確に把握するだけでなく、より速い応答速度とより包括的なコンテンツ サービスを提供する新しい「Xiao Ai Classmate」を作成しました。たとえば、ユーザーが複雑な科学的概念について質問する場合、&ldq

概要 ModelScope ユーザーがプラットフォームによって提供されるさまざまなモデルを迅速かつ便利に使用できるようにするために、ModelScope 公式モデルの実装と、これらのモデルを推論に使用するために必要なツールを含む、完全に機能する Python ライブラリのセットが提供されます。データの前処理、後処理、効果評価などの機能に関わるコードを提供するとともに、シンプルで使いやすいAPIと豊富な使用例を提供します。このライブラリを呼び出すことで、ユーザーはわずか数行のコードを記述するだけでモデルの推論、トレーニング、評価などのタスクを完了でき、また、これを基に二次開発を迅速に実行して独自の革新的なアイデアを実現することもできます。現在ライブラリによって提供されているアルゴリズム モデルは次のとおりです。

Seed-TTS は、ByteDance Doubao 大規模モデル チームによって最近リリースされた大規模音声生成モデルです。生成される音声は実際の人間とほとんど**変わりません**、特に人間の音声を模倣する学習に関しては**忠実度**と**流暢さの両方で、発音**欠陥**さえも生成される可能性があります。 ** **優れたパフォーマンス。たとえば、Seed-TTS に音声を提供すると、そのテキストに基づいて新しい音声が生成され、元の素材の音声特性が得られます。元の素材 (プロンプト): Seed-TTS によって生成された中国語の音声: 突然、私の周りで笑い声が聞こえました。私は彼らを見て、意気揚々と胸を張り、少し肉付きの良い腕を振り、笑いました。「私の体の肉は、私の圧倒的な魅力を隠すためのものです、そうでなければ
