From 08d6ea5ecb8eac18b89b5f3a3da6e10cdb1c6c27 Mon Sep 17 00:00:00 2001 From: wooway777 Date: Thu, 16 Jul 2026 01:44:11 +0000 Subject: [PATCH] fix: metax event.c --- csrc/engine/infer_engine.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/csrc/engine/infer_engine.cpp b/csrc/engine/infer_engine.cpp index a5221eb3..03486dcf 100644 --- a/csrc/engine/infer_engine.cpp +++ b/csrc/engine/infer_engine.cpp @@ -2,6 +2,7 @@ #include "../config/config_factory.hpp" #include "spdlog/spdlog.h" #include +#include #include #include @@ -146,6 +147,15 @@ std::vector InferEngine::state_dict_keys() { //------------------------------------------------------ infinilm::InfinilmModel::Input InferEngine::Input::to_model_input(infinicore::Device device) const { + // MACA maps a registered user pointer to only one node. Serialize H2D + // copies so TP ranks never access the same host registration concurrently. + static std::mutex maca_host_copy_mutex; + const bool serialize_host_copy + = device.getType() == infinicore::Device::Type::METAX; + std::unique_lock maca_host_copy_lock; + if (serialize_host_copy) { + maca_host_copy_lock = std::unique_lock(maca_host_copy_mutex); + } auto to_device = [&](const std::optional &t) -> std::optional { @@ -183,6 +193,10 @@ InferEngine::Input::to_model_input(infinicore::Device device) const { visual_token_ranges, to_device(target_hidden_states)}; + if (serialize_host_copy) { + infinicore::context::syncStream(); + } + infinilm::global_state::get_forward_context().attn_metadata = { input.past_sequence_lengths, input.total_sequence_lengths,