# 7-1-1. Splitter

Splitterは、実行されるジョブを秘匿暗号化可能なものは実施し、学習データをノードに振り分ける重要な機能を担っています。以下は、Splitterの主要な役割と処理の流れです。

1.  ProgramIdに対応するSplitterの呼び出しとデータセットの分割

    ProgramIdは、プログラムの固有の識別子であり、Splitterはこの識別子に基づいて適切なサブプログラムを選択します。Splitterは、与えられたデータセットを機械学習アルゴリズムに最適な形式に変換し、NumParallel数に応じて分割します。NumParallelは、並列処理するサブプログラムの数を示し、データセットはこの数に基づいて均等に分割されます。
2.  Jobの分割とSubJobのEMETH Core(L1)/EMETH Execution Layer(L2)への登録

    Splitterは、分割されたデータセットに対応するJobを複数のSubJobに分割します。各SubJobには、固有のIDが割り当てられ、親Jobとの関連性が保持されます。分割されたSubJobは、EMETH Core(L1)/EMETH Execution Layer(L2)に登録され、分散処理の準備が整います。親JobとSubJobではProgramIdが異なります。これにより、プログラムの階層構造が表現されます。

    （例：ProgramId:1 = GPT3学習全体の親Job処理、ProgramId:11 = ProgramId:1のSubJob処理）

Splitterは、プログラムとジョブを巧みに分割し、秘匿暗号化を施すことで、データの機密性を保護しつつ、効率的な分散処理を実現します。この機能により、大規模なデータセットを扱う場合でも、高速かつ安全に処理を行うことができます。

Splitterの役割は、EMETHのアーキテクチャーにおいて極めて重要です。データの分割と分散は、並列処理の基盤となり、全体的なパフォーマンスを大幅に向上させます。また、秘匿暗号化によるデータの保護は、プライバシーとセキュリティの観点から不可欠です。
