xinference 1.1.1__py3-none-any.whl → 1.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of xinference might be problematic. Click here for more details.

Files changed (125) hide show
  1. xinference/_version.py +3 -3
  2. xinference/api/restful_api.py +49 -65
  3. xinference/core/model.py +77 -19
  4. xinference/core/supervisor.py +81 -10
  5. xinference/core/utils.py +2 -2
  6. xinference/core/worker.py +32 -0
  7. xinference/model/image/model_spec.json +18 -0
  8. xinference/model/image/model_spec_modelscope.json +20 -0
  9. xinference/model/llm/__init__.py +2 -0
  10. xinference/model/llm/llm_family.json +96 -0
  11. xinference/model/llm/llm_family_modelscope.json +99 -0
  12. xinference/model/llm/mlx/core.py +23 -73
  13. xinference/model/llm/transformers/cogagent.py +272 -0
  14. xinference/model/llm/transformers/core.py +1 -0
  15. xinference/model/llm/transformers/qwen2_vl.py +10 -1
  16. xinference/model/llm/utils.py +27 -3
  17. xinference/model/llm/vllm/core.py +37 -7
  18. xinference/model/llm/vllm/xavier/__init__.py +13 -0
  19. xinference/model/llm/vllm/xavier/allocator.py +74 -0
  20. xinference/model/llm/vllm/xavier/block.py +112 -0
  21. xinference/model/llm/vllm/xavier/block_manager.py +71 -0
  22. xinference/model/llm/vllm/xavier/block_tracker.py +116 -0
  23. xinference/model/llm/vllm/xavier/engine.py +247 -0
  24. xinference/model/llm/vllm/xavier/executor.py +132 -0
  25. xinference/model/llm/vllm/xavier/scheduler.py +422 -0
  26. xinference/model/llm/vllm/xavier/test/__init__.py +13 -0
  27. xinference/model/llm/vllm/xavier/test/test_xavier.py +122 -0
  28. xinference/model/llm/vllm/xavier/transfer.py +298 -0
  29. xinference/model/video/diffusers.py +14 -0
  30. xinference/model/video/model_spec.json +15 -0
  31. xinference/model/video/model_spec_modelscope.json +16 -0
  32. xinference/types.py +13 -0
  33. xinference/web/ui/build/asset-manifest.json +6 -6
  34. xinference/web/ui/build/index.html +1 -1
  35. xinference/web/ui/build/static/css/main.51a587ff.css +2 -0
  36. xinference/web/ui/build/static/css/main.51a587ff.css.map +1 -0
  37. xinference/web/ui/build/static/js/main.1eb206d1.js +3 -0
  38. xinference/web/ui/build/static/js/main.1eb206d1.js.map +1 -0
  39. xinference/web/ui/node_modules/.cache/babel-loader/03c4052f1b91f6ba0c5389bdcf49c43319b4076c08e4b8585dab312538ae290a.json +1 -0
  40. xinference/web/ui/node_modules/.cache/babel-loader/1786b83003b8e9605a0f5f855a185d4d16e38fc893dfb326a2a9cca206b4240a.json +1 -0
  41. xinference/web/ui/node_modules/.cache/babel-loader/17cbc181dd674b9150b80c73ed6a82656de0082d857f6e5f66d9716129ac0b38.json +1 -0
  42. xinference/web/ui/node_modules/.cache/babel-loader/185ceb8872d562e032b47e79df6a45670e06345b8ed70aad1a131e0476783c5c.json +1 -0
  43. xinference/web/ui/node_modules/.cache/babel-loader/2213d49de260e1f67c888081b18f120f5225462b829ae57c9e05a05cec83689d.json +1 -0
  44. xinference/web/ui/node_modules/.cache/babel-loader/26b8c9f34b0bed789b3a833767672e39302d1e0c09b4276f4d58d1df7b6bd93b.json +1 -0
  45. xinference/web/ui/node_modules/.cache/babel-loader/2b484da66c724d0d56a40849c109327408796a668b1381511b6e9e03baa48658.json +1 -0
  46. xinference/web/ui/node_modules/.cache/babel-loader/2cbbbce9b84df73330d4c42b82436ed881b3847628f2fbc346aa62e2859fd88c.json +1 -0
  47. xinference/web/ui/node_modules/.cache/babel-loader/2ec9b14431ed33ce6901bf9f27007be4e6e472709c99d6e22b50ce528e4b78ee.json +1 -0
  48. xinference/web/ui/node_modules/.cache/babel-loader/3b966db018f96be4a055d6ca205f0990d4d0b370e2980c17d8bca2c9a021819c.json +1 -0
  49. xinference/web/ui/node_modules/.cache/babel-loader/3eefb411b24c2b3ce053570ef50daccf154022f0e168be5ed0fec21394baf9f4.json +1 -0
  50. xinference/web/ui/node_modules/.cache/babel-loader/522b229e3cac219123f0d69673f5570e191c2d2a505dc65b312d336eae2279c0.json +1 -0
  51. xinference/web/ui/node_modules/.cache/babel-loader/52e45f17ba300580ea3fcc9f9228ccba194bb092b76f25e9255af311f8b05aab.json +1 -0
  52. xinference/web/ui/node_modules/.cache/babel-loader/5a0bc4631f936459afc1a3b1d3ec2420118b1f00e11f60ccac3e08088f3f27a8.json +1 -0
  53. xinference/web/ui/node_modules/.cache/babel-loader/611fa2c6c53b66039991d06dfb0473b5ab37fc63b4564e0f6e1718523768a045.json +1 -0
  54. xinference/web/ui/node_modules/.cache/babel-loader/6329bc76c406fe5eb305412383fbde5950f847bb5e43261f73f37622c365acb4.json +1 -0
  55. xinference/web/ui/node_modules/.cache/babel-loader/63c8e07687ea53a4f8a910ee5e42e0eb26cd1acbfbe820f3e3248a786ee51401.json +1 -0
  56. xinference/web/ui/node_modules/.cache/babel-loader/69b2d5001684174ec9da57e07914eed3eac4960018bceb6cbfa801d861301d7c.json +1 -0
  57. xinference/web/ui/node_modules/.cache/babel-loader/710c1acda69e561e30a933b98c6a56d50197868b15c21e2aad55ab6d46649eb6.json +1 -0
  58. xinference/web/ui/node_modules/.cache/babel-loader/720deca1fce5a1dc5056048fa8258fd138a82ea855f350b6613f104a73fb761f.json +1 -0
  59. xinference/web/ui/node_modules/.cache/babel-loader/76a23b92d26a499c57e61eea2b895fbc9771bd0849a72e66f8e633192017978b.json +1 -0
  60. xinference/web/ui/node_modules/.cache/babel-loader/858063f23b34dfe600254eb5afd85518b0002ec4b30b7386616c45600826e3b2.json +1 -0
  61. xinference/web/ui/node_modules/.cache/babel-loader/920b82c1c89124cf217109eeedbfcd3aae3b917be50c9dfb6bbb4ce26bdfd2e7.json +1 -0
  62. xinference/web/ui/node_modules/.cache/babel-loader/94d8b7aeb0076f2ce07db598cea0e87b13bc8d5614eb530b8d6e696c2daf6f88.json +1 -0
  63. xinference/web/ui/node_modules/.cache/babel-loader/9e917fe7022d01b2ccbe5cc0ce73d70bb72bee584ff293bad71bdff6695dee28.json +1 -0
  64. xinference/web/ui/node_modules/.cache/babel-loader/9f28fdb8399f1d0474f0aca86f1658dc94f5bf0c90f6146352de150692de8862.json +1 -0
  65. xinference/web/ui/node_modules/.cache/babel-loader/a0dfafa06b2bb7cba8cad41c482503f61944f759f4318139362602ef5cc47ccb.json +1 -0
  66. xinference/web/ui/node_modules/.cache/babel-loader/afb8084f539534cd594755ea2205ecd5bd1f62dddcfdf75a2eace59a28131278.json +1 -0
  67. xinference/web/ui/node_modules/.cache/babel-loader/b57b1438b77294c1f3f6cfce12ac487d8106c6f016975ba0aec94d98997e2e1e.json +1 -0
  68. xinference/web/ui/node_modules/.cache/babel-loader/b9917b0bf8e4d55ccbac1c334aa04d6ff3c5b6ed9e5d38b9ea2c687fa7d3f5a9.json +1 -0
  69. xinference/web/ui/node_modules/.cache/babel-loader/bbcc94b0149963d1d6f267ee1f4f03d3925b758392ce2f516c3fe8af0e0169fc.json +1 -0
  70. xinference/web/ui/node_modules/.cache/babel-loader/bdee44abeadc4abc17d41c52eb49c6e19a4b1a267b6e16876ce91bdeeebfc52d.json +1 -0
  71. xinference/web/ui/node_modules/.cache/babel-loader/beb112b70f4a56db95920a9e20efb6c97c37b68450716730217a9ee1a9ae92be.json +1 -0
  72. xinference/web/ui/node_modules/.cache/babel-loader/c88db97be0cdf440193b3995996e83510a04cb00048135485fc0e26d197e80b5.json +1 -0
  73. xinference/web/ui/node_modules/.cache/babel-loader/d49e5314d34310a62d01a03067ce1bec5da00abce84c5196aa9c6842fa79a430.json +1 -0
  74. xinference/web/ui/node_modules/.cache/babel-loader/d7664d18c4ddbad9c3a6a31b91f7c00fb0dde804608674a9860ee50f33e54708.json +1 -0
  75. xinference/web/ui/node_modules/.cache/babel-loader/d9072c318b819b7c90a0f7e9cc0b6413b4dbeb8e9859898e53d75ea882fcde99.json +1 -0
  76. xinference/web/ui/node_modules/.cache/babel-loader/db16a983bc08a05f0439cc61ca0840e49e1d8400eef678909f16c032a418a3d6.json +1 -0
  77. xinference/web/ui/node_modules/.cache/babel-loader/dc249829767b8abcbc3677e0b07b6d3ecbfdfe6d08cfe23a665eb33373a9aa9d.json +1 -0
  78. xinference/web/ui/node_modules/.cache/babel-loader/e242c583c2dbc2784f0fcf513523975f7d5df447e106c1c17e49e8578a6fc3ed.json +1 -0
  79. xinference/web/ui/node_modules/.cache/babel-loader/eac5f1296513e69e4b96f750ddccd4d0264e2bae4e4c449144e83274a48698d9.json +1 -0
  80. xinference/web/ui/node_modules/.cache/babel-loader/ed57202cb79649bb716400436590245547df241988fc7c8e1d85d132299542d2.json +1 -0
  81. xinference/web/ui/node_modules/.cache/babel-loader/f125bf72e773a14cdaebd0c343e80adb909d12e317ee5c00cd4a57442fbe2c62.json +1 -0
  82. xinference/web/ui/node_modules/.cache/babel-loader/f91af913d7f91c410719ab13136aaed3aaf0f8dda06652f25c42cb5231587398.json +1 -0
  83. xinference/web/ui/node_modules/.package-lock.json +67 -3
  84. xinference/web/ui/node_modules/@babel/runtime/package.json +592 -538
  85. xinference/web/ui/node_modules/html-parse-stringify/package.json +50 -0
  86. xinference/web/ui/node_modules/i18next/dist/esm/package.json +1 -0
  87. xinference/web/ui/node_modules/i18next/package.json +129 -0
  88. xinference/web/ui/node_modules/react-i18next/.eslintrc.json +74 -0
  89. xinference/web/ui/node_modules/react-i18next/dist/es/package.json +1 -0
  90. xinference/web/ui/node_modules/react-i18next/package.json +162 -0
  91. xinference/web/ui/node_modules/void-elements/package.json +34 -0
  92. xinference/web/ui/package-lock.json +69 -3
  93. xinference/web/ui/package.json +2 -0
  94. xinference/web/ui/src/locales/en.json +186 -0
  95. xinference/web/ui/src/locales/zh.json +186 -0
  96. {xinference-1.1.1.dist-info → xinference-1.2.0.dist-info}/METADATA +9 -6
  97. {xinference-1.1.1.dist-info → xinference-1.2.0.dist-info}/RECORD +102 -56
  98. xinference/web/ui/build/static/css/main.5061c4c3.css +0 -2
  99. xinference/web/ui/build/static/css/main.5061c4c3.css.map +0 -1
  100. xinference/web/ui/build/static/js/main.4eb4ee80.js +0 -3
  101. xinference/web/ui/build/static/js/main.4eb4ee80.js.map +0 -1
  102. xinference/web/ui/node_modules/.cache/babel-loader/07ce9e632e6aff24d7aa3ad8e48224433bbfeb0d633fca723453f1fcae0c9f1c.json +0 -1
  103. xinference/web/ui/node_modules/.cache/babel-loader/1130403f9e46f5738a23b45ac59b57de8f360c908c713e2c0670c2cce9bd367a.json +0 -1
  104. xinference/web/ui/node_modules/.cache/babel-loader/131091b25d26b17cdca187d7542a21475c211138d900cf667682260e76ef9463.json +0 -1
  105. xinference/web/ui/node_modules/.cache/babel-loader/1f269fb2a368363c1cb2237825f1dba093b6bdd8c44cc05954fd19ec2c1fff03.json +0 -1
  106. xinference/web/ui/node_modules/.cache/babel-loader/331312668fa8bd3d7401818f4a25fa98135d7f61371cd6bfff78b18cf4fbdd92.json +0 -1
  107. xinference/web/ui/node_modules/.cache/babel-loader/40f17338fc75ae095de7d2b4d8eae0d5ca0193a7e2bcece4ee745b22a7a2f4b7.json +0 -1
  108. xinference/web/ui/node_modules/.cache/babel-loader/4de9a6942c5f1749d6cbfdd54279699975f16016b182848bc253886f52ec2ec3.json +0 -1
  109. xinference/web/ui/node_modules/.cache/babel-loader/822586ed1077201b64b954f12f25e3f9b45678c1acbabe53d8af3ca82ca71f33.json +0 -1
  110. xinference/web/ui/node_modules/.cache/babel-loader/8c5eeb02f772d02cbe8b89c05428d0dd41a97866f75f7dc1c2164a67f5a1cf98.json +0 -1
  111. xinference/web/ui/node_modules/.cache/babel-loader/8d33354bd2100c8602afc3341f131a88cc36aaeecd5a4b365ed038514708e350.json +0 -1
  112. xinference/web/ui/node_modules/.cache/babel-loader/9375a35b05d56989b2755bf72161fa707c92f28569d33765a75f91a568fda6e9.json +0 -1
  113. xinference/web/ui/node_modules/.cache/babel-loader/a158a9ffa0c9b169aee53dd4a0c44501a596755b4e4f6ede7746d65a72e2a71f.json +0 -1
  114. xinference/web/ui/node_modules/.cache/babel-loader/c7bf40bab396765f67d0fed627ed3665890608b2d0edaa3e8cb7cfc96310db45.json +0 -1
  115. xinference/web/ui/node_modules/.cache/babel-loader/d6c643278a0b28320e6f33a60f5fb64c053997cbdc39a60e53ccc574688ade9e.json +0 -1
  116. xinference/web/ui/node_modules/.cache/babel-loader/e42b72d4cc1ea412ebecbb8d040dc6c6bfee462c33903c2f1f3facb602ad742e.json +0 -1
  117. xinference/web/ui/node_modules/.cache/babel-loader/e64b7e8cedcf43d4c95deba60ec1341855c887705805bb62431693118b870c69.json +0 -1
  118. xinference/web/ui/node_modules/.cache/babel-loader/f5039ddbeb815c51491a1989532006b96fc3ae49c6c60e3c097f875b4ae915ae.json +0 -1
  119. xinference/web/ui/node_modules/.cache/babel-loader/f72f011744c4649fabddca6f7a9327861ac0a315a89b1a2e62a39774e7863845.json +0 -1
  120. xinference/web/ui/node_modules/.cache/babel-loader/feabb04b4aa507102da0a64398a40818e878fd1df9b75dda8461b3e1e7ff3f11.json +0 -1
  121. /xinference/web/ui/build/static/js/{main.4eb4ee80.js.LICENSE.txt → main.1eb206d1.js.LICENSE.txt} +0 -0
  122. {xinference-1.1.1.dist-info → xinference-1.2.0.dist-info}/LICENSE +0 -0
  123. {xinference-1.1.1.dist-info → xinference-1.2.0.dist-info}/WHEEL +0 -0
  124. {xinference-1.1.1.dist-info → xinference-1.2.0.dist-info}/entry_points.txt +0 -0
  125. {xinference-1.1.1.dist-info → xinference-1.2.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,298 @@
1
+ # Copyright 2022-2025 XProbe Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ import asyncio
15
+ import logging
16
+ from functools import lru_cache
17
+ from queue import Queue
18
+ from typing import Dict, List, Optional, no_type_check
19
+
20
+ import torch
21
+ import xoscar as xo
22
+ from vllm.core.scheduler import Scheduler
23
+ from vllm.utils import TORCH_DTYPE_TO_NUMPY_DTYPE, Device
24
+ from vllm.worker.cache_engine import CacheEngine
25
+
26
+ logger = logging.getLogger(__name__)
27
+
28
+
29
+ class BufferTransferMixin:
30
+ def __init__(self):
31
+ self.num_buffer: int = 0
32
+ self.buffers: List[torch.Tensor] = []
33
+ self.buffer_queue: Optional[Queue] = None
34
+ self.transfer_block_num = 0
35
+ self.num_attn_layers = 0
36
+
37
+ def init_buffer(
38
+ self, num_buffer: int, buffer_shape, buffer_dtype, buffer_device, pin_memory
39
+ ):
40
+ # (transfer_block_num, num_attn_layers, 2, *kv_cache_shape[2:])
41
+
42
+ if buffer_dtype is torch.bfloat16:
43
+ buffer_dtype = torch.float16
44
+
45
+ self.num_buffer = num_buffer
46
+ self.transfer_block_num = buffer_shape[0]
47
+ self.num_attn_layers = buffer_shape[1]
48
+
49
+ self.buffers = [
50
+ torch.zeros(
51
+ size=buffer_shape,
52
+ dtype=buffer_dtype,
53
+ device=buffer_device,
54
+ pin_memory=pin_memory,
55
+ )
56
+ for _ in range(self.num_buffer)
57
+ ]
58
+
59
+ self.buffer_queue = Queue()
60
+ for i in range(self.num_buffer):
61
+ self.buffer_queue.put_nowait(i)
62
+ logger.debug(
63
+ f"Init buffer done. "
64
+ f"transfer_block_num: {self.transfer_block_num}, "
65
+ f"num_buffer: {self.num_buffer}, "
66
+ f"buffer_dtype: {buffer_dtype}, "
67
+ f"buffer_shape: {buffer_shape}"
68
+ )
69
+
70
+ @no_type_check
71
+ def get_buffer_index(self) -> int:
72
+ return self.buffer_queue.get()
73
+
74
+ @no_type_check
75
+ def free_buffer_index(self, index: int) -> None:
76
+ self.buffer_queue.put_nowait(index)
77
+
78
+ def get_swap_buffer(self, index: int, num_blocks: int) -> torch.Tensor:
79
+ buf = self.buffers[index]
80
+ buffer = buf[:num_blocks].view(
81
+ self.num_attn_layers, 2, num_blocks, *buf.shape[3:]
82
+ )
83
+ return buffer
84
+
85
+ @lru_cache(maxsize=None)
86
+ def get_gloo_dtype(self, input_dtype: torch.dtype):
87
+ from xoscar.collective.common import TypeMappingGloo
88
+
89
+ return TypeMappingGloo[TORCH_DTYPE_TO_NUMPY_DTYPE[input_dtype]]
90
+
91
+
92
+ class TransferActor(xo.StatelessActor, BufferTransferMixin):
93
+ @classmethod
94
+ def default_uid(cls):
95
+ return f"vllm-transfer-actor"
96
+
97
+ def __init__(
98
+ self,
99
+ rank: int,
100
+ world_size: int,
101
+ rank_address: str,
102
+ store_address: str,
103
+ store_port: int,
104
+ world_addresses: List[str],
105
+ ):
106
+ super().__init__()
107
+ self._rank = rank
108
+ self._world_size = world_size
109
+ self._store_address = store_address
110
+ self._rank_address = rank_address
111
+ self._store_port = store_port
112
+ self._world_addresses = world_addresses
113
+ self._context = None
114
+ self._cache_engine: Optional[List[CacheEngine]] = None
115
+ self._scheduler: Optional[List[Scheduler]] = None
116
+ self._swap_stream = torch.cuda.Stream()
117
+
118
+ async def __post_create__(self):
119
+ from xoscar.collective import xoscar_pygloo as xp
120
+
121
+ context = xp.rendezvous.Context(self._rank, self._world_size)
122
+
123
+ attr = xp.transport.tcp.attr(self._rank_address.split(":")[0])
124
+ dev = xp.transport.tcp.CreateDevice(attr)
125
+
126
+ opt = xp.rendezvous.TCPStoreOptions()
127
+ opt.port = self._store_port
128
+ opt.numWorkers = self._world_size
129
+ opt.isServer = self._rank == 0
130
+
131
+ store = xp.rendezvous.TCPStore(self._store_address, opt)
132
+ store = xp.rendezvous.PrefixStore(str(self._world_size), store)
133
+
134
+ context.connectFullMesh(store, dev)
135
+ self._context = context
136
+ logger.debug(
137
+ f"Rank {self._rank} arrives successfully, world addresses: {self._world_addresses}"
138
+ )
139
+
140
+ def setup(
141
+ self,
142
+ cache_engine: List[CacheEngine],
143
+ scheduler: List[Scheduler],
144
+ num_buffer: int,
145
+ buffer_shape,
146
+ buffer_dtype,
147
+ buffer_device,
148
+ pin_memory: bool,
149
+ ):
150
+ self._cache_engine = cache_engine
151
+ self._scheduler = scheduler
152
+ self.init_buffer(
153
+ num_buffer, buffer_shape, buffer_dtype, buffer_device, pin_memory
154
+ )
155
+
156
+ def _get_cache_engine(self, virtual_engine: int) -> CacheEngine:
157
+ return self._cache_engine[virtual_engine] # type: ignore
158
+
159
+ @staticmethod
160
+ def _get_swap_block_ids(src_to_dst: Dict[int, int], is_sender: bool) -> List[int]:
161
+ return list(sorted([r if is_sender else l for r, l in src_to_dst.items()]))
162
+
163
+ def _swap_out_to_buffer(
164
+ self, cache_engine: CacheEngine, cpu_buf_index: int, block_ids: List[int]
165
+ ) -> torch.Tensor:
166
+ num_blocks = len(block_ids)
167
+ src_to_dst = torch.tensor(
168
+ [(block_num, idx) for idx, block_num in enumerate(block_ids)],
169
+ device="cpu",
170
+ dtype=torch.int64,
171
+ ).view(-1, 2)
172
+ cpu_buf = self.get_swap_buffer(cpu_buf_index, num_blocks)
173
+ with torch.cuda.stream(self._swap_stream):
174
+ for i in range(self.num_attn_layers):
175
+ cache_engine.attn_backend.swap_blocks(
176
+ cache_engine.gpu_cache[i], cpu_buf[i], src_to_dst
177
+ )
178
+ torch.cuda.Stream.synchronize(self._swap_stream)
179
+ return cpu_buf
180
+
181
+ def _swap_in_from_buffer(
182
+ self, cache_engine: CacheEngine, cpu_buf: torch.Tensor, block_ids: List[int]
183
+ ) -> None:
184
+ src_to_dst = torch.tensor(
185
+ [(idx, block_num) for idx, block_num in enumerate(block_ids)],
186
+ device="cpu",
187
+ dtype=torch.int64,
188
+ ).view(-1, 2)
189
+ with torch.cuda.stream(self._swap_stream):
190
+ for i in range(self.num_attn_layers):
191
+ cache_engine.attn_backend.swap_blocks(
192
+ cpu_buf[i], cache_engine.gpu_cache[i], src_to_dst
193
+ )
194
+ torch.cuda.Stream.synchronize(self._swap_stream)
195
+
196
+ def _incr_count_for_block_id(self, virtual_engine: int, block_ids: List[int]):
197
+ """
198
+ The reference count of the `block_id` involved in the transfer is incremented by 1
199
+ to ensure it is not reclaimed.
200
+ """
201
+ scheduler = self._scheduler[virtual_engine] # type: ignore
202
+ gpu_allocator = scheduler.block_manager.block_allocator._allocators[Device.GPU]
203
+
204
+ for _id in block_ids:
205
+ gpu_allocator._refcounter.incr(_id)
206
+
207
+ def _decr_count_for_block_id(self, virtual_engine: int, block_ids: List[int]):
208
+ """
209
+ After the transfer, the reference count is decremented by 1.
210
+ """
211
+ scheduler = self._scheduler[virtual_engine] # type: ignore
212
+ gpu_allocator = scheduler.block_manager.block_allocator._allocators[Device.GPU]
213
+
214
+ for _id in block_ids:
215
+ gpu_allocator._refcounter.decr(_id)
216
+
217
+ async def do_send(
218
+ self, virtual_engine: int, to_rank: int, src_to_dst: Dict[int, int]
219
+ ):
220
+ """
221
+ Sending logic: GPU -> Buffer -> Gloo send.
222
+ GPU -> Buffer is directly handled using the internal `swap_out` interface of vllm.
223
+ """
224
+ from xoscar.collective import xoscar_pygloo as xp
225
+
226
+ cache_engine = self._get_cache_engine(virtual_engine)
227
+
228
+ block_ids = self._get_swap_block_ids(src_to_dst, is_sender=True)
229
+ self._incr_count_for_block_id(virtual_engine, block_ids)
230
+ cpu_buf_index = self.get_buffer_index()
231
+ total_blocks: int = len(block_ids)
232
+
233
+ try:
234
+ for start_idx in range(0, total_blocks, self.transfer_block_num):
235
+ offset = min(self.transfer_block_num, total_blocks - start_idx)
236
+ send_block_ids = block_ids[start_idx : start_idx + offset]
237
+ sendbuf = self._swap_out_to_buffer(
238
+ cache_engine, cpu_buf_index, send_block_ids
239
+ )
240
+ assert sendbuf.is_contiguous()
241
+ sendptr = sendbuf.numpy().ctypes.data
242
+ data_size = sendbuf.numel()
243
+ datatype = self.get_gloo_dtype(sendbuf.dtype)
244
+ peer = to_rank
245
+ xp.send(self._context, sendptr, data_size, datatype, peer)
246
+ finally:
247
+ self._decr_count_for_block_id(virtual_engine, block_ids)
248
+ self.free_buffer_index(cpu_buf_index)
249
+
250
+ async def do_recv(
251
+ self, virtual_engine: int, from_rank: int, src_to_dst: Dict[int, int]
252
+ ):
253
+ """
254
+ Receiving logic: Gloo recv -> Buffer -> GPU.
255
+ Buffer -> GPU is directly handled using the internal `swap_in` interface of vllm.
256
+ """
257
+ from xoscar.collective import xoscar_pygloo as xp
258
+
259
+ cache_engine = self._get_cache_engine(virtual_engine)
260
+
261
+ block_ids = self._get_swap_block_ids(src_to_dst, is_sender=False)
262
+ self._incr_count_for_block_id(virtual_engine, block_ids)
263
+ total_blocks = len(block_ids)
264
+ cpu_buf_index = self.get_buffer_index()
265
+
266
+ try:
267
+ for start_idx in range(0, total_blocks, self.transfer_block_num):
268
+ offset = min(self.transfer_block_num, total_blocks - start_idx)
269
+ recv_block_ids = block_ids[start_idx : start_idx + offset]
270
+ recvbuf = self.get_swap_buffer(cpu_buf_index, len(recv_block_ids))
271
+ assert recvbuf.is_contiguous()
272
+ recvptr = recvbuf.numpy().ctypes.data
273
+ data_size = recvbuf.numel()
274
+ datatype = self.get_gloo_dtype(recvbuf.dtype)
275
+ peer = from_rank
276
+ xp.recv(self._context, recvptr, data_size, datatype, peer)
277
+
278
+ self._swap_in_from_buffer(cache_engine, recvbuf, recv_block_ids)
279
+ finally:
280
+ self._decr_count_for_block_id(virtual_engine, block_ids)
281
+ self.free_buffer_index(cpu_buf_index)
282
+
283
+ async def recv(
284
+ self, virtual_engine: int, from_address: str, src_to_dst: Dict[int, int]
285
+ ):
286
+ """
287
+ This is the external entry point for the call.
288
+ The transfer logic is as follows:
289
+ the receiver requests the sender to send the data directly to itself in a point-to-point manner.
290
+ """
291
+ rank = self._world_addresses.index(from_address)
292
+ sender_ref = await xo.actor_ref(
293
+ address=from_address, uid=f"{TransferActor.default_uid()}-{rank}"
294
+ )
295
+ await asyncio.gather(
296
+ sender_ref.do_send(virtual_engine, self._rank, src_to_dst),
297
+ self.do_recv(virtual_engine, rank, src_to_dst),
298
+ )
@@ -91,6 +91,20 @@ class DiffUsersVideoModel:
91
91
  pipeline = self._model = CogVideoXPipeline.from_pretrained(
92
92
  self._model_path, **kwargs
93
93
  )
94
+ elif self._model_spec.model_family == "HunyuanVideo":
95
+ from diffusers import HunyuanVideoPipeline, HunyuanVideoTransformer3DModel
96
+
97
+ transformer_torch_dtype = kwargs.pop("transformer_torch_dtype")
98
+ if isinstance(transformer_torch_dtype, str):
99
+ transformer_torch_dtype = getattr(torch, transformer_torch_dtype)
100
+ transformer = HunyuanVideoTransformer3DModel.from_pretrained(
101
+ self._model_path,
102
+ subfolder="transformer",
103
+ torch_dtype=transformer_torch_dtype,
104
+ )
105
+ pipeline = self._model = HunyuanVideoPipeline.from_pretrained(
106
+ self._model_path, transformer=transformer, **kwargs
107
+ )
94
108
  else:
95
109
  raise Exception(
96
110
  f"Unsupported model family: {self._model_spec.model_family}"
@@ -30,5 +30,20 @@
30
30
  "default_generate_config": {
31
31
  "guidance_scale": 7
32
32
  }
33
+ },
34
+ {
35
+ "model_name": "HunyuanVideo",
36
+ "model_family": "HunyuanVideo",
37
+ "model_id": "hunyuanvideo-community/HunyuanVideo",
38
+ "model_revision": "e8c2aaa66fe3742a32c11a6766aecbf07c56e773",
39
+ "model_ability": [
40
+ "text2video"
41
+ ],
42
+ "default_model_config": {
43
+ "transformer_torch_dtype": "bfloat16",
44
+ "torch_dtype": "float16"
45
+ },
46
+ "default_generate_config": {
47
+ }
33
48
  }
34
49
  ]
@@ -32,5 +32,21 @@
32
32
  "default_generate_config": {
33
33
  "guidance_scale": 7
34
34
  }
35
+ },
36
+ {
37
+ "model_name": "HunyuanVideo",
38
+ "model_family": "HunyuanVideo",
39
+ "model_hub": "modelscope",
40
+ "model_id": "Xorbits/HunyuanVideo",
41
+ "model_revision": "master",
42
+ "model_ability": [
43
+ "text2video"
44
+ ],
45
+ "default_model_config": {
46
+ "transformer_torch_dtype": "bfloat16",
47
+ "torch_dtype": "float16"
48
+ },
49
+ "default_generate_config": {
50
+ }
35
51
  }
36
52
  ]
xinference/types.py CHANGED
@@ -302,6 +302,19 @@ class PytorchGenerateConfig(TypedDict, total=False):
302
302
  request_id: Optional[str]
303
303
 
304
304
 
305
+ class CogagentGenerateConfig(PytorchGenerateConfig, total=False):
306
+ platform: Optional[Literal["Mac", "WIN", "Mobile"]]
307
+ format: Optional[
308
+ Literal[
309
+ "(Answer in Action-Operation-Sensitive format.)",
310
+ "(Answer in Status-Plan-Action-Operation format.)",
311
+ "(Answer in Status-Action-Operation-Sensitive format.)",
312
+ "(Answer in Status-Action-Operation format.)",
313
+ "(Answer in Action-Operation format.)",
314
+ ]
315
+ ]
316
+
317
+
305
318
  class PytorchModelConfig(TypedDict, total=False):
306
319
  revision: Optional[str]
307
320
  device: str
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "files": {
3
- "main.css": "./static/css/main.5061c4c3.css",
4
- "main.js": "./static/js/main.4eb4ee80.js",
3
+ "main.css": "./static/css/main.51a587ff.css",
4
+ "main.js": "./static/js/main.1eb206d1.js",
5
5
  "static/media/icon.webp": "./static/media/icon.4603d52c63041e5dfbfd.webp",
6
6
  "index.html": "./index.html",
7
- "main.5061c4c3.css.map": "./static/css/main.5061c4c3.css.map",
8
- "main.4eb4ee80.js.map": "./static/js/main.4eb4ee80.js.map"
7
+ "main.51a587ff.css.map": "./static/css/main.51a587ff.css.map",
8
+ "main.1eb206d1.js.map": "./static/js/main.1eb206d1.js.map"
9
9
  },
10
10
  "entrypoints": [
11
- "static/css/main.5061c4c3.css",
12
- "static/js/main.4eb4ee80.js"
11
+ "static/css/main.51a587ff.css",
12
+ "static/js/main.1eb206d1.js"
13
13
  ]
14
14
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.svg"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>Xinference</title><script defer="defer" src="./static/js/main.4eb4ee80.js"></script><link href="./static/css/main.5061c4c3.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.svg"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>Xinference</title><script defer="defer" src="./static/js/main.1eb206d1.js"></script><link href="./static/css/main.51a587ff.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
@@ -0,0 +1,2 @@
1
+ .container{cursor:pointer;display:block}.container,.descriptionCard{border-radius:20px;height:300px;position:relative;width:300px}.descriptionCard{left:-1px;padding:20px;top:-1px}.cardTitle{display:flex;justify-content:space-between}.iconButtonBox{align-items:center;display:flex}.drawerCard{min-height:100%;padding:20px 80px 0;position:relative;width:60vw}.p{-webkit-line-clamp:4;-webkit-box-orient:vertical;display:-webkit-box;font-size:14px;overflow:hidden;padding:0 10px;text-overflow:ellipsis;word-break:break-word}.formContainer{height:80%;overflow:scroll;padding:0 10px}.buttonsContainer{align-items:center;bottom:50px;display:flex;justify-content:space-between;left:100px;position:absolute;right:100px}.buttonContainer{background-color:initial;border-width:0;width:45%}.buttonItem{border:1px solid #e5e7eb;border-radius:4px;cursor:pointer;padding:5px;width:100%}.buttonItem:hover{border-color:#888}.instructionText{color:#666;font-size:12px;font-style:italic;margin:30px 0;text-align:center}.iconRow{bottom:20px;justify-content:space-between;left:20px;position:absolute;right:20px}.iconItem,.iconRow{align-items:center;display:flex}.iconItem{flex-direction:column;margin:20px}.boldIconText{font-size:1.2em;font-weight:700}.muiIcon{font-size:1.5em}.smallText{font-size:.8em}.dialogBox{background-color:#fff;height:607px;margin:32px;overflow-x:scroll;width:1241px}.dialogTitle{color:#000;display:flex;justify-content:space-between;padding:20px 20px 7px}.dialogTitle-model_name{font-size:18px;font-weight:700}.pathBox{cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:160px}.pathBox2{width:300px}.empty{color:#555;font-size:20px;left:50%;position:absolute;top:30%;-webkit-transform:translate(-50%);transform:translate(-50%)}.deleteDialog{align-items:center;display:flex}.warningIcon{color:#ed6c02;margin-right:10px}.jsonDialog{background-color:#fff;border-radius:8px;color:#000;display:flex;flex-direction:column;padding:10px 30px}.jsonDialog-title{align-items:center;display:flex;justify-content:space-between;margin:10px 0 20px}.title-name{font-size:16px;font-weight:700}.main-box{height:500px;width:700px}.textarea-box{border:1px solid #ddd;border-radius:5px;color:#444;height:100%;padding:5px 10px;resize:none;width:100%}.but-box{display:flex;justify-content:end;margin-top:20px}.copyText{color:#666;cursor:pointer;font-size:14px!important}.copyText:hover{color:#1976d2}.formBox{max-height:80vh;max-width:50vw;min-width:50vw;overflow:auto;padding:40px 20px 0 0;position:relative;transition:all .4s ease-in-out}.broaden{max-width:100%;min-width:100%;padding-right:0}.show-json{align-items:center;display:flex;right:60px;top:90px}.icon,.show-json{position:absolute}.icon{cursor:pointer;margin-left:20px;right:-40px}.icon:hover{color:#1976d2}.arrow{font-size:24px!important}.jsonBox{min-height:80vh;position:relative;transition:all .4s ease-in-out;width:100%}.hide{overflow:hidden;-webkit-transform:translate(30vw);transform:translate(30vw);width:0}.checkboxWrapper{align-items:center;display:flex;flex-wrap:wrap;width:100%}.jsonBox-header{align-items:center;display:flex;justify-content:space-between}.jsonBox-title{font-weight:700;line-height:40px}.textarea{background-color:initial;border:1px solid #ddd;border-radius:5px;color:#444;height:calc(100% - 40px);padding:5px 10px;resize:none;width:100%}.addBtn{margin-left:20px!important}.item{border:1px solid #ddd;border-radius:10px;margin:10px 50px 0;overflow:hidden;padding:20px;position:relative}.item:hover .deleteBtn{-webkit-transform:translateX(-50px);transform:translateX(-50px)}.deleteBtn{background-color:#1976d2;border-radius:25px;height:50px;line-height:70px;position:absolute;right:20px;text-align:center;top:calc(50% - 25px);-webkit-transform:translateX(80px);transform:translateX(80px);transition:all .3s ease-in-out;width:50px}.deleteBtn:hover{box-shadow:0 0 10px #aaa;cursor:pointer}.deleteIcon{color:#fff;font-size:28px!important}.chat_template_box{align-items:start;display:flex;gap:10px}.chat_template_test{width:30%}.chat_template_test_mainBox{border:1px solid #ccc;border-radius:4px;height:137px;overflow:scroll;padding:10px}.chat_template_test_tip{color:rgba(0,0,0,.6);font-size:10px;margin:4px 14px 0}.test_res_box{border:1px solid #ddd;border-radius:4px;margin-top:5px;min-height:55px;padding:10px}.css-19qh8xo-MuiInputBase-input-MuiOutlinedInput-input.Mui-disabled{-webkit-text-fill-color:#000!important}
2
+ /*# sourceMappingURL=main.51a587ff.css.map*/
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/css/main.51a587ff.css","mappings":"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","sources":["scenes/launch_model/styles/modelCardStyle.css","components/copyComponent/style.css","scenes/register_model/styles/registerModelStyle.css"],"sourcesContent":[".container {\n display: block;\n position: relative;\n width: 300px;\n height: 300px;\n cursor: pointer;\n border-radius: 20px;\n}\n.descriptionCard {\n position: relative;\n top: -1px;\n left: -1px;\n width: 300px;\n height: 300px;\n padding: 20px;\n border-radius: 20px;\n}\n.cardTitle {\n display: flex;\n justify-content: space-between;\n}\n.iconButtonBox {\n display: flex;\n align-items: center;\n}\n.drawerCard {\n position: relative;\n padding: 20px 80px 0;\n min-height: 100%;\n width: 60vw;\n}\n.p {\n display: -webkit-box;\n -webkit-line-clamp: 4;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n font-size: 14px;\n padding: 0px 10px;\n}\n.formContainer {\n height: 80%;\n overflow: scroll;\n padding: 0 10px;\n}\n.buttonsContainer {\n position: absolute;\n bottom: 50px;\n left: 100px;\n right: 100px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.buttonContainer {\n width: 45%;\n border-width: 0px;\n background-color: transparent;\n}\n.buttonItem {\n cursor: pointer;\n width: 100%;\n padding: 5px;\n border-radius: 4px;\n border: 1px solid #e5e7eb;\n border-width: 1px;\n border-color: #e5e7eb;\n}\n.buttonItem:hover {\n border-color: #888;\n}\n.instructionText {\n font-size: 12px;\n color: #666666;\n font-style: italic;\n margin: 30px 0;\n text-align: center;\n}\n.iconRow {\n position: absolute;\n bottom: 20px;\n left: 20px;\n right: 20px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.iconItem {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: 20px;\n}\n.boldIconText {\n font-weight: bold;\n font-size: 1.2em;\n}\n.muiIcon {\n font-size: 1.5em;\n}\n.smallText {\n font-size: 0.8em;\n}\n.dialogBox {\n width: 1241px;\n height: 607px;\n background-color: #fff;\n margin: 32px;\n overflow-x: scroll;\n}\n.dialogTitle {\n display: flex;\n justify-content: space-between;\n padding: 20px 20px 7px;\n color: #000;\n}\n.dialogTitle-model_name {\n font-size: 18px;\n font-weight: 700;\n}\n.pathBox {\n width: 160px;\n cursor: pointer;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.pathBox2 {\n width: 300px;\n}\n.empty {\n position: absolute;\n left: 50%;\n top: 30%;\n font-size: 20px;\n color: #555;\n transform: translate(-50%, 0);\n}\n.deleteDialog {\n display: flex;\n align-items: center;\n}\n.warningIcon {\n margin-right: 10px;\n color: rgb(237, 108, 2);\n}\n.jsonDialog {\n display: flex;\n flex-direction: column;\n padding: 10px 30px;\n background-color: #fff;\n color: #000;\n border-radius: 8px;\n}\n.jsonDialog-title {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin: 10px 0 20px 0;\n}\n.title-name {\n font-size: 16px;\n font-weight: 700;\n}\n.main-box {\n width: 700px;\n height: 500px;\n}\n.textarea-box {\n width: 100%;\n height: 100%;\n padding: 5px 10px;\n border: 1px solid #ddd;\n border-radius: 5px;\n resize: none;\n color: #444;\n}\n.but-box {\n display: flex;\n justify-content: end;\n margin-top: 20px;\n}\n",".copyText {\n font-size: 14px !important;\n color: #666;\n cursor: pointer;\n}\n\n.copyText:hover {\n color: #1976d2;\n}\n",".formBox {\n position: relative;\n max-width: 50vw;\n min-width: 50vw;\n max-height: 80vh;\n overflow: auto;\n padding: 40px 20px 0 0;\n transition: all 0.4s ease-in-out;\n}\n\n.broaden {\n max-width: 100%;\n min-width: 100%;\n padding-right: 0;\n}\n\n.show-json {\n display: flex;\n align-items: center;\n position: absolute;\n top: 90px;\n right: 60px;\n}\n\n.icon {\n position: absolute;\n right: -40px;\n cursor: pointer;\n margin-left: 20px;\n}\n\n.icon:hover {\n color: #1976d2;\n}\n\n.arrow {\n font-size: 24px !important;\n}\n\n.jsonBox {\n position: relative;\n min-height: 80vh;\n width: 100%;\n transition: all 0.4s ease-in-out;\n}\n\n.hide {\n width: 0;\n transform: translate(30vw, 0);\n overflow: hidden;\n}\n\n.checkboxWrapper {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n width: 100%;\n}\n\n.jsonBox-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.jsonBox-title {\n line-height: 40px;\n font-weight: 700;\n}\n\n.textarea {\n width: 100%;\n height: calc(100% - 40px);\n padding: 5px 10px;\n border: 1px solid #ddd;\n border-radius: 5px;\n resize: none;\n color: #444;\n background-color: transparent;\n}\n\n.addBtn {\n margin-left: 20px !important;\n}\n\n.item {\n position: relative;\n border: 1px solid #ddd;\n margin: 10px 50px 0;\n padding: 20px;\n border-radius: 10px;\n overflow: hidden;\n}\n\n.item:hover .deleteBtn {\n transform: translateX(-50px);\n}\n\n.deleteBtn {\n position: absolute;\n right: 20px;\n top: calc(50% - 25px);\n width: 50px;\n height: 50px;\n transform: translateX(80px);\n text-align: center;\n line-height: 70px;\n border-radius: 25px;\n background-color: #1976d2;\n transition: all 0.3s ease-in-out;\n}\n\n.deleteBtn:hover {\n cursor: pointer;\n box-shadow: 0 0 10px #aaa;\n}\n\n.deleteIcon {\n font-size: 28px !important;\n color: #fff;\n}\n\n.chat_template_box {\n display: flex;\n align-items: start;\n gap: 10px;\n}\n\n.chat_template_test {\n width: 30%;\n}\n\n.chat_template_test_mainBox {\n height: 137px;\n padding: 10px;\n border: 1px solid #ccc;\n border-radius: 4px;\n overflow: scroll;\n}\n\n.chat_template_test_tip {\n font-size: 10px;\n margin: 4px 14px 0;\n color: rgba(0, 0, 0, 0.6);\n}\n\n.test_res_box {\n border: 1px solid #ddd;\n min-height: 55px;\n padding: 10px;\n margin-top: 5px;\n border-radius: 4px;\n}\n\n.css-19qh8xo-MuiInputBase-input-MuiOutlinedInput-input.Mui-disabled {\n -webkit-text-fill-color: #000 !important;\n}\n"],"names":[],"sourceRoot":""}