-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Expand file tree
/
Copy pathrnnCacheFormatter.h
More file actions
86 lines (70 loc) · 3.51 KB
/
Copy pathrnnCacheFormatter.h
File metadata and controls
86 lines (70 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
* SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "tensorrt_llm/batch_manager/cacheFormatter.h"
#include "tensorrt_llm/batch_manager/common.h"
#include "tensorrt_llm/batch_manager/rnnCacheTransBuffer.h"
#include "tensorrt_llm/common/assert.h"
#include "tensorrt_llm/executor/cache_transmission/cacheSplitConcat.h"
#include "tensorrt_llm/executor/dataTransceiverState.h"
#include "tensorrt_llm/runtime/common.h"
#include <vector>
namespace tensorrt_llm::batch_manager
{
class TransferSession;
namespace rnn_state_manager
{
class RnnCacheTransBufferManager;
} // namespace rnn_state_manager
/// @brief RNN Cache Formatter for formatting/unformatting RNN states during transfer.
/// Uses unified pool mode via BaseKVCacheManager (for CppMambaHybridCacheManager, block-indexed pool).
class RnnCacheFormatter : public kv_cache_manager::BaseCacheFormatter
{
public:
using SizeType32 = tensorrt_llm::runtime::SizeType32;
using CacheState = executor::kv_cache::CacheState;
using RequestIdType = tensorrt_llm::batch_manager::RequestIdType;
/// @brief Constructor for unified pool mode (CppMambaHybridCacheManager).
/// @param kvCacheManager Pointer to the KV cache manager with unified pool.
/// @param rnnCacheTransBufferManager Pointer to the RNN cache transfer buffer manager.
RnnCacheFormatter(kv_cache_manager::BaseKVCacheManager* kvCacheManager,
rnn_state_manager::RnnCacheTransBufferManager* rnnCacheTransBufferManager);
/// @brief Format RNN states for sending.
/// @param session The transfer session.
void format(TransferSession& session) override;
/// @brief Unformat received RNN states.
/// @param session The transfer session.
void unformat(TransferSession& session) override;
/// @brief Check if transfer is supported between two configurations.
[[nodiscard]] bool inquireSupport(CacheState const& selfConfig, CacheState const& destConfig) const override;
/// @brief Get the counterpart ranks for communication.
[[nodiscard]] std::vector<SizeType32> getCounterparts(
CacheState const& selfConfig, SizeType32 selfIdx, CacheState const& destConfig) const override;
/// @brief Pick receive connections and their corresponding local rank indices.
[[nodiscard]] std::pair<std::vector<size_t>, std::vector<size_t>> pickRecvConnections(size_t numConnections,
CacheState const& selfConfig, SizeType32 selfIdx, CacheState const& destConfig,
std::vector<SizeType32> const& counterPartRanks) const override;
/// @brief Returns the KV cache manager.
[[nodiscard]] kv_cache_manager::BaseKVCacheManager* getCacheManager() const noexcept override
{
return mKvCacheManager;
}
private:
rnn_state_manager::RnnCacheTransBufferManager* mRnnCacheTransBufferManager;
kv_cache_manager::BaseKVCacheManager* mKvCacheManager{nullptr};
};
} // namespace tensorrt_llm::batch_manager