Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 15 additions & 12 deletions src/core/ggml_runner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,15 +66,9 @@ void GGMLRunner::rebuild_params_tensor_set() {
}

ggml_tensor* GGMLRunner::canonical_param_tensor(ggml_tensor* tensor) {
if (tensor == nullptr) {
return nullptr;
}
if (params_tensor_set_.find(tensor) != params_tensor_set_.end()) {
return tensor;
}
if (tensor->view_src != nullptr &&
params_tensor_set_.find(tensor->view_src) != params_tensor_set_.end()) {
return tensor->view_src;
for (auto* current = tensor; current != nullptr; current = current->view_src) {
if (params_tensor_set_.count(current) != 0)
return current;
}
return nullptr;
}
Expand Down Expand Up @@ -483,9 +477,10 @@ void GGMLRunner::runner_end() {
if (auto manager = residency_manager.lock()) {
manager->clear_prefetched_params(reinterpret_cast<uintptr_t>(this));
std::vector<ggml_tensor*> tensors;
for (auto tensor = ggml_get_first_tensor(params_ctx); tensor != nullptr;
tensor = ggml_get_next_tensor(params_ctx, tensor)) {
tensors.push_back(tensor);
for (auto tensor : params_tensor_set_) {
auto* parameter = manager->resolve_param_tensor(const_cast<ggml_tensor*>(tensor));
if (parameter != nullptr)
tensors.push_back(parameter);
}
manager->evict_compute_backend_params(tensors);
manager->remove_runtime_owner(reinterpret_cast<uintptr_t>(this));
Expand Down Expand Up @@ -620,7 +615,15 @@ std::optional<sd::Tensor<float>> GGMLRunner::compute(get_graph_cb_t get_graph,
if (!prepare_compute_graph(get_graph, &graph)) {
return std::nullopt;
}
params_tensor_set_dirty_ = true;
rebuild_params_tensor_set();
if (auto manager = residency_manager.lock()) {
for (int i = 0; i < sd::ggml_graph_cut::leaf_count(graph); ++i) {
auto* parameter = manager->resolve_param_tensor(sd::ggml_graph_cut::leaf_tensor(graph, i));
if (parameter != nullptr)
params_tensor_set_.insert(parameter);
}
}
auto output = execute_graph(graph, n_threads, no_return, read_outputs);
success = output.has_value();
if (success) {
Expand Down
18 changes: 14 additions & 4 deletions src/core/ordered_map.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,19 @@ class OrderedMap {
insert(kv);
}

OrderedMap(const OrderedMap&) = default;
OrderedMap(OrderedMap&&) noexcept = default;
OrderedMap& operator=(const OrderedMap&) = default;
OrderedMap(const OrderedMap& other) {
for (const auto& value : other) {
insert(value);
}
}
OrderedMap(OrderedMap&&) noexcept = default;
OrderedMap& operator=(const OrderedMap& other) {
if (this != &other) {
OrderedMap copy(other);
swap(copy);
}
return *this;
}
OrderedMap& operator=(OrderedMap&&) noexcept = default;

// --- element access ---
Expand Down Expand Up @@ -174,4 +184,4 @@ class OrderedMap {
}
};

#endif // __SD_CORE_ORDERED_MAP_HPP__
#endif // __SD_CORE_ORDERED_MAP_HPP__
5 changes: 3 additions & 2 deletions src/detailer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -676,7 +676,7 @@ bool ADetailerGGML::load_from_file(const std::string& detector_path) {
model_manager = std::make_shared<ModelManager>();
model_manager->set_n_threads(n_threads);
model_manager->set_enable_mmap(false);
ModelLoader& loader = model_manager->loader();
ModelLoader loader;
if (!loader.init_from_file(detector_path)) {
LOG_ERROR("failed to load ADetailer detector: '%s'", detector_path.c_str());
return false;
Expand All @@ -696,7 +696,8 @@ bool ADetailerGGML::load_from_file(const std::string& detector_path) {

std::map<std::string, ggml_tensor*> tensors;
detector->get_param_tensors(tensors);
if (!model_manager->register_param_tensors("YOLOv8",
if (!model_manager->set_loader(loader) ||
!model_manager->register_param_tensors(ModelComponent::Detector,
std::move(tensors),
backend_manager.params_backend_is_disk(SDBackendModule::DETECTOR)
? ModelManager::ResidencyMode::Disk
Expand Down
7 changes: 4 additions & 3 deletions src/device_residency_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,10 @@ struct DeviceResidencyManager {
const std::vector<ggml_tensor*>& required_params) const = 0;
virtual bool assign_compute_backend(const std::vector<ggml_tensor*>& tensors,
ggml_backend_t compute_backend) = 0;
virtual bool prepare_params(const std::vector<ggml_tensor*>& tensors) = 0;
virtual void release_compute_backend_params(const std::vector<ggml_tensor*>& tensors) = 0;
virtual void evict_compute_backend_params(const std::vector<ggml_tensor*>& tensors) = 0;
virtual ggml_tensor* resolve_param_tensor(ggml_tensor* tensor) const { return nullptr; }
virtual bool prepare_params(const std::vector<ggml_tensor*>& tensors) = 0;
virtual void release_compute_backend_params(const std::vector<ggml_tensor*>& tensors) = 0;
virtual void evict_compute_backend_params(const std::vector<ggml_tensor*>& tensors) = 0;
virtual WeightResidencyInfo inspect_compute_backend_params(
const std::vector<ggml_tensor*>& tensors) const = 0;
virtual void update_runtime_residency(uintptr_t owner_id,
Expand Down
5 changes: 3 additions & 2 deletions src/extensions/generation_extension.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ struct GenerationExtensionInitContext {
const sd_ctx_params_t* params;
SDVersion version;
const String2TensorStorage& tensor_storage_map;
ModelLoader& model_loader;
bool photomaker_source_available;
std::shared_ptr<ModelManager> model_manager;
int n_threads;
std::function<bool(SDBackendModule)> ensure_backend_pair;
Expand All @@ -39,7 +39,8 @@ struct GenerationExtensionConditionContext {
struct GenerationExtension {
virtual ~GenerationExtension() = default;

virtual const char* name() const = 0;
virtual ModelComponent component() const = 0;
const char* name() const { return model_component_name(component()); }
virtual bool is_enabled() const {
return false;
}
Expand Down
14 changes: 4 additions & 10 deletions src/extensions/photomaker_extension.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,8 @@ struct PhotoMakerExtension : public GenerationExtension {
SDCondition id_condition;
int start_merge_step = -1;

const char* name() const override {
return "photomaker";
ModelComponent component() const override {
return ModelComponent::PhotoMaker;
}

bool is_enabled() const override {
Expand All @@ -119,7 +119,7 @@ struct PhotoMakerExtension : public GenerationExtension {

bool init(const GenerationExtensionInitContext& ctx) override {
model_path = SAFE_STR(ctx.params->photo_maker_path);
if (model_path.empty()) {
if (model_path.empty() || !ctx.photomaker_source_available) {
return true;
}

Expand All @@ -128,13 +128,7 @@ struct PhotoMakerExtension : public GenerationExtension {
}

PMVersion pm_version = std::strstr(model_path.c_str(), "v2") != nullptr ? PM_VERSION_2 : PM_VERSION_1;
LOG_INFO("loading stacked ID embedding (PHOTOMAKER) model file from '%s'", model_path.c_str());
if (!ctx.model_loader.init_from_file_and_convert_name(model_path, "pmid.")) {
LOG_WARN("loading stacked ID embedding from '%s' failed", model_path.c_str());
return true;
}

pmid_model = std::make_shared<PhotoMakerIDEncoder>(ctx.backend_for(SDBackendModule::PHOTOMAKER),
pmid_model = std::make_shared<PhotoMakerIDEncoder>(ctx.backend_for(SDBackendModule::PHOTOMAKER),
ctx.tensor_storage_map,
"pmid",
ctx.version,
Expand Down
4 changes: 2 additions & 2 deletions src/extensions/pulid_extension.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ struct PuLIDExtension : public GenerationExtension {
sd::Tensor<float> id_embedding;
float id_weight = 1.0f;

const char* name() const override {
return "pulid";
ModelComponent component() const override {
return ModelComponent::PuLID;
}

bool is_enabled() const override {
Expand Down
Loading
Loading