leideng's picture
download
raw
3.59 kB
try:
from lmcache.integration.sglang.sglang_adapter import (
LMCacheLayerwiseConnector,
LoadMetadata,
StoreMetadata,
)
except ImportError:
raise RuntimeError(
"LMCache is not installed. Please install it by running `pip install lmcache` in the root directory of LMCache"
)
import os
import torch
from sglang.srt.configs.model_config import ModelConfig
os.environ["LMCACHE_USE_EXPERIMENTAL"] = "True"
os.environ["LMCACHE_CONFIG_FILE"] = "example_config.yaml"
def test_load_store_metadata():
model_config = ModelConfig(
model_path="Qwen/Qwen3-4B",
)
# Generate Dummy KV Cache
head_num = model_config.num_key_value_heads
head_dim = model_config.head_dim
layer_num = model_config.num_hidden_layers
buffer_size = 256
input_id_len = 16
k_buffer = [
torch.randn(buffer_size, head_num, head_dim, dtype=torch.bfloat16).cuda()
for _ in range(layer_num)
]
v_buffer = [
torch.randn(buffer_size, head_num, head_dim, dtype=torch.bfloat16).cuda()
for _ in range(layer_num)
]
connector = LMCacheLayerwiseConnector(model_config, 1, 0, k_buffer, v_buffer)
fake_token_ids = torch.randint(0, model_config.vocab_size, (input_id_len,)).tolist()
fake_kv_indices = torch.randint(0, buffer_size, (input_id_len,))
offset = 0
store_metadata = StoreMetadata(
last_node=None,
token_ids=fake_token_ids,
kv_indices=fake_kv_indices,
offset=offset,
)
load_metadata = LoadMetadata(
token_ids=fake_token_ids,
slot_mapping=fake_kv_indices,
offset=offset,
)
current_stream = torch.cuda.current_stream()
retrieve_token_num = connector.start_load_kv(load_metadata)
assert retrieve_token_num == 0
connector.store_kv(store_metadata)
current_stream.synchronize()
# check retrieve
gt_key_buffer = [
torch.zeros(input_id_len, head_num, head_dim, dtype=torch.bfloat16).cuda()
for _ in range(layer_num)
]
gt_value_buffer = [
torch.zeros(input_id_len, head_num, head_dim, dtype=torch.bfloat16).cuda()
for _ in range(layer_num)
]
for i in range(layer_num):
gt_key_buffer[i] = k_buffer[i][fake_kv_indices]
gt_value_buffer[i] = v_buffer[i][fake_kv_indices]
# clear the k_buffer and v_buffer
for _ in range(layer_num):
k_buffer[i].zero_()
v_buffer[i].zero_()
retrieve_token_num = connector.start_load_kv(load_metadata)
assert retrieve_token_num == input_id_len
for i in range(layer_num):
current_stream.synchronize()
connector.load_kv_layerwise(i)
current_stream.synchronize()
test_key_buffer = [
torch.zeros(input_id_len, head_num, head_dim, dtype=torch.bfloat16).cuda()
for _ in range(layer_num)
]
test_value_buffer = [
torch.zeros(input_id_len, head_num, head_dim, dtype=torch.bfloat16).cuda()
for _ in range(layer_num)
]
for i in range(layer_num):
test_key_buffer[i] = k_buffer[i][fake_kv_indices]
test_value_buffer[i] = v_buffer[i][fake_kv_indices]
for i in range(layer_num):
assert torch.allclose(test_key_buffer[i], gt_key_buffer[i])
assert torch.allclose(test_value_buffer[i], gt_value_buffer[i])
print("================================================")
print("TEST_LOAD_STORE_METADATA PASSED!")
print("================================================")
connector.close()
if __name__ == "__main__":
test_load_store_metadata()

Xet Storage Details

Size:
3.59 kB
·
Xet hash:
ae4dd28b23f80d299ba1114f8cd6657de75aa0e6d02ade04720d22d6381412d8

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.