Files
wehub-resource-sync 770d92cb1f
Lint / lint (push) Waiting to run
Windows CI / Windows (push) Waiting to run
Build Docs / Deploy Docs (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 13:23:58 +08:00

116 lines
3.2 KiB
C++

/*!
* \file model.h
* \brief Metadata stored in model lib
*/
#ifndef MLC_LLM_CPP_MODEL_METADATA_H_
#define MLC_LLM_CPP_MODEL_METADATA_H_
#include <tvm/ffi/container/shape.h>
#include <tvm/ffi/dtype.h>
#include <tvm/ffi/extra/json.h>
#include <tvm/ffi/extra/module.h>
#include <tvm/ffi/string.h>
#include <tvm/runtime/logging.h>
#include <unordered_map>
namespace mlc {
namespace llm {
using tvm::ffi::Module;
using tvm::ffi::Shape;
using tvm::ffi::String;
/*! \brief The kind of cache. */
enum class KVStateKind : int {
kKVCache = 0,
kRNNState = 1,
kNone = 2,
kHybrid = 3,
};
inline std::string KVStateKindToString(KVStateKind kv_state_kind) {
if (kv_state_kind == KVStateKind::kKVCache) {
return "kv_cache";
} else if (kv_state_kind == KVStateKind::kRNNState) {
return "rnn_state";
} else if (kv_state_kind == KVStateKind::kNone) {
return "none";
} else if (kv_state_kind == KVStateKind::kHybrid) {
return "hybrid";
} else {
LOG(FATAL) << "Invalid kv state kind: " << static_cast<int>(kv_state_kind);
}
}
inline KVStateKind KVStateKindFromString(const std::string& kv_state_kind) {
if (kv_state_kind == "kv_cache") {
return KVStateKind::kKVCache;
} else if (kv_state_kind == "rnn_state") {
return KVStateKind::kRNNState;
} else if (kv_state_kind == "none") {
return KVStateKind::kNone;
} else if (kv_state_kind == "hybrid") {
return KVStateKind::kHybrid;
} else {
LOG(FATAL) << "Invalid kv state kind string: " << kv_state_kind;
}
}
struct ModelMetadata {
struct Param {
struct Preproc {
String func_name;
Shape in_shape;
Shape out_shape;
DLDataType out_dtype;
static Preproc FromJSON(const tvm::ffi::json::Object& js,
const tvm::ffi::json::Object& model_config);
};
String name;
Shape shape;
DLDataType dtype;
std::vector<Preproc> preprocs;
std::vector<int> pipeline_stages;
static Param FromJSON(const tvm::ffi::json::Object& param_obj,
const tvm::ffi::json::Object& model_config);
};
struct KVCacheMetadata {
int64_t num_hidden_layers;
int64_t num_attention_heads;
int64_t num_key_value_heads;
int64_t head_dim;
static KVCacheMetadata FromJSON(const tvm::ffi::json::Object& json);
};
std::string model_type;
std::string quantization;
int64_t context_window_size;
int64_t prefill_chunk_size;
int64_t max_batch_size;
int64_t sliding_window_size;
int64_t tensor_parallel_shards;
int64_t pipeline_parallel_stages;
bool disaggregation;
int64_t attention_sink_size;
int64_t seqlen_padding_factor;
std::vector<Param> params;
std::unordered_map<std::string, int64_t> memory_usage;
KVStateKind kv_state_kind;
KVCacheMetadata kv_cache_metadata;
std::string model_task;
std::string embedding_model_type;
std::string embedding_pooling_strategy;
bool embedding_normalize = false;
static ModelMetadata FromJSON(const tvm::ffi::json::Object& json_str,
const tvm::ffi::json::Object& model_config);
static ModelMetadata FromModule(Module module, const tvm::ffi::json::Object& model_config);
};
} // namespace llm
} // namespace mlc
#endif // MLC_LLM_CPP_MODEL_METADATA_H_