diff --git a/onnx_diagnostic/torch_models/hghub/hub_data_cached_configs.py b/onnx_diagnostic/torch_models/hghub/hub_data_cached_configs.py index ff6cdb5e..55789b8c 100644 --- a/onnx_diagnostic/torch_models/hghub/hub_data_cached_configs.py +++ b/onnx_diagnostic/torch_models/hghub/hub_data_cached_configs.py @@ -4687,3 +4687,145 @@ def _ccached_zai_glm_45(): }, } ) + + +def _ccached_microsoft_phi3_mini_128k_instruct(): + "microsoft/Phi-3-mini-128k-instruct" + return transformers.Phi3Config( + **{ + "_name_or_path": "Phi-3-mini-128k-instruct", + "architectures": ["Phi3ForCausalLM"], + "attention_dropout": 0.0, + "auto_map": { + "AutoConfig": "configuration_phi3.Phi3Config", + "AutoModelForCausalLM": "modeling_phi3.Phi3ForCausalLM", + }, + "bos_token_id": 1, + "embd_pdrop": 0.0, + "eos_token_id": 32000, + "hidden_act": "silu", + "hidden_size": 3072, + "initializer_range": 0.02, + "intermediate_size": 8192, + "max_position_embeddings": 131072, + "model_type": "phi3", + "num_attention_heads": 32, + "num_hidden_layers": 32, + "num_key_value_heads": 32, + "original_max_position_embeddings": 4096, + "pad_token_id": 32000, + "resid_pdrop": 0.0, + "rms_norm_eps": 1e-05, + "rope_scaling": { + "long_factor": [ + 1.0700000524520874, + 1.1200000047683716, + 1.149999976158142, + 1.4199999570846558, + 1.5699999332427979, + 1.7999999523162842, + 2.129999876022339, + 2.129999876022339, + 3.009999990463257, + 5.910000324249268, + 6.950000286102295, + 9.070000648498535, + 9.930000305175781, + 10.710000038146973, + 11.130000114440918, + 14.609999656677246, + 15.409998893737793, + 19.809999465942383, + 37.279998779296875, + 38.279998779296875, + 38.599998474121094, + 40.12000274658203, + 46.20000457763672, + 50.940006256103516, + 53.66000747680664, + 54.9373893737793, + 56.89738845825195, + 57.28738784790039, + 59.98738479614258, + 60.86738586425781, + 60.887386322021484, + 61.71739196777344, + 62.91739273071289, + 62.957393646240234, + 63.41739273071289, + 63.8173942565918, + 63.83739471435547, + 63.897396087646484, + 63.93739700317383, + 64.06739807128906, + 64.11434936523438, + 64.12435150146484, + 64.15435028076172, + 64.19435119628906, + 64.24435424804688, + 64.57435607910156, + 64.69000244140625, + 64.76000213623047, + ], + "short_factor": [ + 1.1, + 1.1, + 1.1, + 1.3000000000000003, + 1.3500000000000003, + 1.3500000000000003, + 1.4000000000000004, + 1.5500000000000005, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.000000000000001, + 2.0500000000000007, + 2.0500000000000007, + 2.0500000000000007, + 2.0500000000000007, + 2.0500000000000007, + 2.0500000000000007, + 2.1000000000000005, + 2.1000000000000005, + 2.1500000000000004, + 2.25, + 2.25, + 2.25, + 2.25, + 2.25, + 2.3999999999999995, + 2.4499999999999993, + 2.499999999999999, + 2.6999999999999984, + 2.6999999999999984, + 2.7499999999999982, + 2.799999999999998, + 2.8999999999999977, + 3.049999999999997, + ], + "type": "longrope", + }, + "rope_theta": 10000.0, + "sliding_window": 262144, + "tie_word_embeddings": false, + "torch_dtype": "bfloat16", + "transformers_version": "4.40.2", + "use_cache": true, + "attention_bias": false, + "vocab_size": 32064, + } + ) diff --git a/onnx_diagnostic/torch_models/validate.py b/onnx_diagnostic/torch_models/validate.py index 1579bbcb..f64673f3 100644 --- a/onnx_diagnostic/torch_models/validate.py +++ b/onnx_diagnostic/torch_models/validate.py @@ -712,6 +712,7 @@ def validate_model( print(f"[validate_model] done (dump onnx) in {duration}") data["onnx_filename"] = onnx_filename summary["time_onnx_save"] = duration + summary.update(compute_statistics(onnx_filename)) if verbose: print(f"[validate_model] dumps statistics in {dump_folder!r}...") dump_stats = os.path.join(dump_folder, f"{folder_name}.stats") @@ -815,6 +816,39 @@ def validate_model( return summary, data +def compute_statistics(onnx_filename: str) -> Dict[str, Union[float, int]]: + """Computes some statistics on the model itself.""" + onx = onnx.load(onnx_filename, load_external_data=False) + + def node_iter(proto): + if isinstance(proto, onnx.ModelProto): + yield from node_iter(proto.graph) + for f in proto.functions: + yield from node_iter(f) + elif isinstance(proto, (onnx.FunctionProto, onnx.GraphProto)): + for node in proto.node: + yield node + for att in node.attribute: + if att.type == onnx.AttributeProto.GRAPH: + yield from node_iter(att.g) + if hasattr(proto, "initializer"): + yield from proto.initializer + else: + raise NotImplementedError(f"Unexpected type={type(proto)}") + + counts: Dict[str, Union[float, int]] = {} + for proto in node_iter(onx): + if isinstance(proto, onnx.NodeProto): + key = f"n_node_{proto.op_type}" + else: + key = f"n_node_initializer_{proto.data_type}" + + if key not in counts: + counts[key] = 0 + counts[key] += 1 + return counts + + def _validate_do_run_model( data, summary, key, tag, expected_tag, verbose, repeat, warmup, quiet ):