mirror of
https://github.com/leejet/stable-diffusion.cpp.git
synced 2026-11-11 11:26:34 +00:00
feat: add configurable Qwen cache types and early cache scheduling (#2045)
This commit is contained in:
1 parent
4dfe8f5d45
commit
740c7ae193
11 files changed
+185
-61
No files matched your search
+15
-6
@@ -67,6 +67,7 @@ struct WeightAdapter {
|
||||
struct GGMLRunnerContext {
|
||||
ggml_backend_t backend = nullptr;
|
||||
ggml_context* ggml_ctx = nullptr;
|
||||
ggml_cgraph* graph = nullptr;
|
||||
bool flash_attn_enabled = false;
|
||||
bool sage_attn_enabled = false;
|
||||
float linear_scale = 0.f;
|
||||
@@ -102,6 +103,12 @@ struct GGMLRunnerContext {
|
||||
return get_cache_tensor(name);
|
||||
}
|
||||
|
||||
void expand_graph(ggml_tensor* tensor) const {
|
||||
if (graph != nullptr && tensor != nullptr) {
|
||||
ggml_build_forward_expand(graph, tensor);
|
||||
}
|
||||
}
|
||||
|
||||
void persist_cache_tensor(const std::string& name, ggml_tensor* tensor) const {
|
||||
if (!cache_tensor || tensor == nullptr) {
|
||||
return;
|
||||
@@ -122,10 +129,11 @@ ggml_tensor* ggml_ext_attention_ext(GGMLRunnerContext* ctx,
|
||||
ggml_tensor* k,
|
||||
ggml_tensor* v,
|
||||
int64_t n_head,
|
||||
ggml_tensor* mask = nullptr,
|
||||
bool skip_reshape = false,
|
||||
bool flash_attn = false,
|
||||
float kv_scale = 1.f);
|
||||
ggml_tensor* mask = nullptr,
|
||||
bool skip_reshape = false,
|
||||
bool flash_attn = false,
|
||||
float kv_scale = 1.f,
|
||||
bool* used_flash_attn = nullptr);
|
||||
|
||||
struct GGMLRunner {
|
||||
private:
|
||||
@@ -289,7 +297,8 @@ public:
|
||||
|
||||
virtual ~GGMLRunner();
|
||||
|
||||
virtual GGMLRunnerContext get_context();
|
||||
// Binding a graph schedules cache outputs at registration instead of graph end.
|
||||
virtual GGMLRunnerContext get_context(ggml_cgraph* graph = nullptr);
|
||||
|
||||
void reset_compute_ctx();
|
||||
|
||||
@@ -324,7 +333,7 @@ public:
|
||||
|
||||
ggml_tensor* to_backend(ggml_tensor* tensor);
|
||||
|
||||
void cache(const std::string name, ggml_tensor* tensor);
|
||||
void cache(const std::string name, ggml_tensor* tensor, ggml_cgraph* graph = nullptr);
|
||||
|
||||
ggml_tensor* get_cache_tensor_by_name(const std::string& name) {
|
||||
return cache_.get(name);
|
||||
|
||||
Reference in new issue
Block a user