chore: vendor sglang v0.5.10 snapshot
This commit is contained in:
104
third_party/sglang/test/srt/ascend/test_embed_interpolate_unittest.py
vendored
Normal file
104
third_party/sglang/test/srt/ascend/test_embed_interpolate_unittest.py
vendored
Normal file
@@ -0,0 +1,104 @@
|
||||
import unittest
|
||||
|
||||
import torch
|
||||
|
||||
from sglang.srt.configs.qwen3_vl import Qwen3VLConfig
|
||||
from sglang.srt.distributed.parallel_state import (
|
||||
init_distributed_environment,
|
||||
initialize_model_parallel,
|
||||
)
|
||||
from sglang.srt.layers.dp_attention import initialize_dp_attention
|
||||
from sglang.srt.layers.quantization.unquant import (
|
||||
LinearMethodBase,
|
||||
UnquantizedLinearMethod,
|
||||
)
|
||||
from sglang.srt.models.qwen3_vl import Qwen3VLMoeVisionModel
|
||||
from sglang.srt.server_args import ServerArgs, set_global_server_args_for_scheduler
|
||||
|
||||
|
||||
def unpack(tensor, dim_len, pack_len):
|
||||
dim_part = dim_len // pack_len
|
||||
ret_val = tensor.reshape(dim_part, dim_part, pack_len, pack_len, -1)
|
||||
ret_val = ret_val.permute(4, 0, 2, 1, 3).reshape(1, -1, dim_len, dim_len)
|
||||
return ret_val
|
||||
|
||||
|
||||
class TestEmbedInterpolate(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.pDevice = torch.get_default_device()
|
||||
torch.set_default_device("npu")
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
torch.set_default_device(cls.pDevice)
|
||||
|
||||
def test_embed_interpolate(self):
|
||||
self.assertTrue(issubclass(UnquantizedLinearMethod, LinearMethodBase))
|
||||
t_dim = [16, 32]
|
||||
s_dim = [192, 574]
|
||||
sarg = ServerArgs(model_path="dummy", device="npu")
|
||||
mconf = Qwen3VLConfig(
|
||||
hidden_size=64,
|
||||
num_heads=1,
|
||||
num_position_embeddings=2304,
|
||||
patch_size=16,
|
||||
spatial_merge_size=2,
|
||||
temporal_patch_size=2,
|
||||
deepstack_visual_indexes=[5, 11, 17],
|
||||
in_channels=3,
|
||||
depth=24,
|
||||
intermediate_size=256,
|
||||
hidden_act="gelu_pytorch_tanh",
|
||||
out_hidden_size=2560,
|
||||
)
|
||||
set_global_server_args_for_scheduler(sarg)
|
||||
init_distributed_environment(
|
||||
backend="gloo",
|
||||
world_size=1,
|
||||
rank=0,
|
||||
local_rank=0,
|
||||
distributed_init_method="tcp://127.0.0.1:2646",
|
||||
)
|
||||
initialize_model_parallel()
|
||||
initialize_dp_attention(
|
||||
server_args=sarg,
|
||||
model_config=mconf,
|
||||
)
|
||||
model = Qwen3VLMoeVisionModel(
|
||||
mconf,
|
||||
quant_config=None,
|
||||
norm_eps=1e-6,
|
||||
prefix="visual",
|
||||
)
|
||||
grid_thw = torch.tensor(
|
||||
[(t, s, s) for t, s in zip(t_dim, s_dim)], dtype=torch.int32
|
||||
)
|
||||
embeddings = model.fast_pos_embed_interpolate(grid_thw)
|
||||
|
||||
embeddings_s0 = embeddings[: s_dim[0] * s_dim[0], :]
|
||||
embeddings_s1 = embeddings[s_dim[0] * s_dim[0] : 2 * s_dim[0] * s_dim[0], :]
|
||||
self.assertTrue(torch.allclose(embeddings_s0, embeddings_s1, atol=5e-5))
|
||||
|
||||
embeddings_l = embeddings[
|
||||
t_dim[0] * s_dim[0] * s_dim[0] : t_dim[0] * s_dim[0] * s_dim[0]
|
||||
+ s_dim[1] * s_dim[1],
|
||||
:,
|
||||
]
|
||||
embeddings_s0 = torch.nn.functional.interpolate(
|
||||
unpack(embeddings_s0, s_dim[0], 2),
|
||||
size=(48, 48),
|
||||
mode="area",
|
||||
)
|
||||
embeddings_r = torch.nn.functional.interpolate(
|
||||
unpack(embeddings_l, s_dim[1], 2),
|
||||
size=(48, 48),
|
||||
mode="area",
|
||||
)
|
||||
self.assertTrue(
|
||||
torch.allclose(embeddings_s0, embeddings_r, atol=5e-1, rtol=5e-1)
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user