astra-sim-alibabacloud/astra-sim/workload/Workload.hh (115 lines of code) (raw):
/******************************************************************************
This source code is licensed under the MIT license found in the
LICENSE file in the root directory of this source tree.
*******************************************************************************/
#ifndef __WORKLOAD_HH__
#define __WORKLOAD_HH__
#include <fcntl.h>
#include <math.h>
#include <sys/stat.h>
#include <unistd.h>
#include <chrono>
#include <cstdint>
#include <ctime>
#include <fstream>
#include <iostream>
#include <map>
#include <tuple>
#include "astra-sim/system/Callable.hh"
namespace AstraSim {
class Workload;
class Sys;
class Callable;
class Layer;
class CSVWriter;
} // namespace AstraSim
#include "astra-sim/system/AstraSimDataAPI.hh"
#include "astra-sim/system/Sys.hh"
namespace AstraSim {
enum class ParallelismPolicy {
MicroBenchmark,
Data,
Transformer,
TransformerFwdInBckwd,
DLRM,
DLRMEnhanced,
Model,
HybridDataModel,
HybridModelData,
HybridCustomized,
DistributedInference,
All,
None
};
class Workload : Callable {
public:
enum class LoopState {
Forward_Pass,
Weight_Gradient,
Input_Gradient,
Wait_For_Sim_Finish,
Forward_In_BackPass
};
~Workload();
Layer** layers;
int SIZE;
Sys* generator;
std::string run_type;
Tick counter;
int index;
LoopState current_state;
bool delay_loaded;
bool seprate_log;
bool checkpoint_initiated;
bool collective_issued;
bool initialized;
int TOTAL_PASS;
int DLRM_LAST_BOTTOM_LAYER;
int pass_counter;
int pending_collectives;
int model_parallel_npu_group; // TP Size
int expert_parallel_npu_group; //Ep Size
int pipeline_model_parallelism; //PP Size
int GA; //Ga_Size
int all_gpus;
int vpp;
uint32_t pp_commsize;
ParallelismPolicy parallelismPolicy;
Tick waiting_for_comm;
Workload(
std::string run_name,
Sys* generator,
std::string name,
int TOTAL_PASS,
int total_rows,
int stat_row,
std::string path,
bool seprate_log);
ParallelismPolicy decode_parallelsim(std::string parallelism);
void call(EventType event, CallData* data);
void iterate_micro_benchmark();
void iterate_data_parallel();
void iterate_hybrid_parallel_Transformer();
void iterate_hybrid_parallel_Transformer_fwd_in_bckwd();
void iterate_hybrid_parallel_DLRM();
void iterate_hybrid_parallel_data_model();
void iterate_hybrid_parallel_model_data();
void iterate_hybrid_parallel_customized();
void iterate_model_parallel();
void iterate_distributed_inference();
bool initialize_workload(std::string name);
void initialize_stat_files();
std::map<std::string, std::vector<bool>> decode_involved_dimensions(
ParallelismPolicy policy,
int model_parallel_npu_group);
void fire();
void report();
void check_for_sim_end();
static int get_layer_numbers(std::string workload_input);
CSVWriter* detailed;
CSVWriter* end_to_end;
CSVWriter* dimension_utilization;
std::string path;
std::string run_name;
int stat_row;
int total_rows;
bool registered_for_finished_streams;
};
} // namespace AstraSim
#endif