dask-cuda 23.12.0a231004__tar.gz → 23.12.0a231005__tar.gz

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.
Files changed (57) hide show
  1. {dask-cuda-23.12.0a231004/dask_cuda.egg-info → dask-cuda-23.12.0a231005}/PKG-INFO +1 -1
  2. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_spill.py +64 -30
  3. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/utils.py +4 -4
  4. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005/dask_cuda.egg-info}/PKG-INFO +1 -1
  5. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/pyproject.toml +1 -1
  6. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/LICENSE +0 -0
  7. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/MANIFEST.in +0 -0
  8. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/README.md +0 -0
  9. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/__init__.py +0 -0
  10. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/benchmarks/__init__.py +0 -0
  11. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/benchmarks/common.py +0 -0
  12. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/benchmarks/local_cudf_groupby.py +0 -0
  13. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/benchmarks/local_cudf_merge.py +0 -0
  14. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/benchmarks/local_cudf_shuffle.py +0 -0
  15. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/benchmarks/local_cupy.py +0 -0
  16. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/benchmarks/local_cupy_map_overlap.py +0 -0
  17. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/benchmarks/utils.py +0 -0
  18. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/cli.py +0 -0
  19. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/compat.py +0 -0
  20. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/cuda_worker.py +0 -0
  21. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/device_host_file.py +0 -0
  22. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/disk_io.py +0 -0
  23. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/explicit_comms/__init__.py +0 -0
  24. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/explicit_comms/comms.py +0 -0
  25. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/explicit_comms/dataframe/__init__.py +0 -0
  26. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/explicit_comms/dataframe/shuffle.py +0 -0
  27. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/get_device_memory_objects.py +0 -0
  28. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/initialize.py +0 -0
  29. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/is_device_object.py +0 -0
  30. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/is_spillable_object.py +0 -0
  31. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/local_cuda_cluster.py +0 -0
  32. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/proxify_device_objects.py +0 -0
  33. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/proxify_host_file.py +0 -0
  34. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/proxy_object.py +0 -0
  35. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_cudf_builtin_spilling.py +0 -0
  36. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_dask_cuda_worker.py +0 -0
  37. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_device_host_file.py +0 -0
  38. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_dgx.py +0 -0
  39. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_explicit_comms.py +0 -0
  40. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_from_array.py +0 -0
  41. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_gds.py +0 -0
  42. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_initialize.py +0 -0
  43. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_local_cuda_cluster.py +0 -0
  44. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_proxify_host_file.py +0 -0
  45. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_proxy.py +0 -0
  46. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_utils.py +0 -0
  47. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/tests/test_worker_spec.py +0 -0
  48. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda/worker_spec.py +0 -0
  49. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda.egg-info/SOURCES.txt +0 -0
  50. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda.egg-info/dependency_links.txt +0 -0
  51. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda.egg-info/entry_points.txt +0 -0
  52. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda.egg-info/requires.txt +0 -0
  53. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/dask_cuda.egg-info/top_level.txt +0 -0
  54. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/examples/ucx/client_initialize.py +0 -0
  55. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/examples/ucx/local_cuda_cluster.py +0 -0
  56. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/setup.cfg +0 -0
  57. {dask-cuda-23.12.0a231004 → dask-cuda-23.12.0a231005}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dask-cuda
3
- Version: 23.12.0a231004
3
+ Version: 23.12.0a231005
4
4
  Summary: Utilities for Dask and CUDA interactions
5
5
  Author: NVIDIA Corporation
6
6
  License: Apache-2.0
@@ -1,3 +1,4 @@
1
+ import gc
1
2
  import os
2
3
  from time import sleep
3
4
 
@@ -58,7 +59,10 @@ def assert_device_host_file_size(
58
59
 
59
60
 
60
61
  def worker_assert(
61
- dask_worker, total_size, device_chunk_overhead, serialized_chunk_overhead
62
+ total_size,
63
+ device_chunk_overhead,
64
+ serialized_chunk_overhead,
65
+ dask_worker=None,
62
66
  ):
63
67
  assert_device_host_file_size(
64
68
  dask_worker.data, total_size, device_chunk_overhead, serialized_chunk_overhead
@@ -66,7 +70,10 @@ def worker_assert(
66
70
 
67
71
 
68
72
  def delayed_worker_assert(
69
- dask_worker, total_size, device_chunk_overhead, serialized_chunk_overhead
73
+ total_size,
74
+ device_chunk_overhead,
75
+ serialized_chunk_overhead,
76
+ dask_worker=None,
70
77
  ):
71
78
  start = time()
72
79
  while not device_host_file_size_matches(
@@ -82,6 +89,18 @@ def delayed_worker_assert(
82
89
  )
83
90
 
84
91
 
92
+ def assert_host_chunks(spills_to_disk, dask_worker=None):
93
+ if spills_to_disk is False:
94
+ assert len(dask_worker.data.host)
95
+
96
+
97
+ def assert_disk_chunks(spills_to_disk, dask_worker=None):
98
+ if spills_to_disk is True:
99
+ assert len(dask_worker.data.disk or list()) > 0
100
+ else:
101
+ assert len(dask_worker.data.disk or list()) == 0
102
+
103
+
85
104
  @pytest.mark.parametrize(
86
105
  "params",
87
106
  [
@@ -122,7 +141,7 @@ def delayed_worker_assert(
122
141
  },
123
142
  ],
124
143
  )
125
- @gen_test(timeout=120)
144
+ @gen_test(timeout=30)
126
145
  async def test_cupy_cluster_device_spill(params):
127
146
  cupy = pytest.importorskip("cupy")
128
147
  with dask.config.set(
@@ -144,6 +163,8 @@ async def test_cupy_cluster_device_spill(params):
144
163
  ) as cluster:
145
164
  async with Client(cluster, asynchronous=True) as client:
146
165
 
166
+ await client.wait_for_workers(1)
167
+
147
168
  rs = da.random.RandomState(RandomState=cupy.random.RandomState)
148
169
  x = rs.random(int(50e6), chunks=2e6)
149
170
  await wait(x)
@@ -153,7 +174,10 @@ async def test_cupy_cluster_device_spill(params):
153
174
 
154
175
  # Allow up to 1024 bytes overhead per chunk serialized
155
176
  await client.run(
156
- lambda dask_worker: worker_assert(dask_worker, x.nbytes, 1024, 1024)
177
+ worker_assert,
178
+ x.nbytes,
179
+ 1024,
180
+ 1024,
157
181
  )
158
182
 
159
183
  y = client.compute(x.sum())
@@ -162,20 +186,19 @@ async def test_cupy_cluster_device_spill(params):
162
186
  assert (abs(res / x.size) - 0.5) < 1e-3
163
187
 
164
188
  await client.run(
165
- lambda dask_worker: worker_assert(dask_worker, x.nbytes, 1024, 1024)
189
+ worker_assert,
190
+ x.nbytes,
191
+ 1024,
192
+ 1024,
166
193
  )
167
- host_chunks = await client.run(
168
- lambda dask_worker: len(dask_worker.data.host)
194
+ await client.run(
195
+ assert_host_chunks,
196
+ params["spills_to_disk"],
169
197
  )
170
- disk_chunks = await client.run(
171
- lambda dask_worker: len(dask_worker.data.disk or list())
198
+ await client.run(
199
+ assert_disk_chunks,
200
+ params["spills_to_disk"],
172
201
  )
173
- for hc, dc in zip(host_chunks.values(), disk_chunks.values()):
174
- if params["spills_to_disk"]:
175
- assert dc > 0
176
- else:
177
- assert hc > 0
178
- assert dc == 0
179
202
 
180
203
 
181
204
  @pytest.mark.parametrize(
@@ -218,7 +241,7 @@ async def test_cupy_cluster_device_spill(params):
218
241
  },
219
242
  ],
220
243
  )
221
- @gen_test(timeout=120)
244
+ @gen_test(timeout=30)
222
245
  async def test_cudf_cluster_device_spill(params):
223
246
  cudf = pytest.importorskip("cudf")
224
247
 
@@ -243,6 +266,8 @@ async def test_cudf_cluster_device_spill(params):
243
266
  ) as cluster:
244
267
  async with Client(cluster, asynchronous=True) as client:
245
268
 
269
+ await client.wait_for_workers(1)
270
+
246
271
  # There's a known issue with datetime64:
247
272
  # https://github.com/numpy/numpy/issues/4983#issuecomment-441332940
248
273
  # The same error above happens when spilling datetime64 to disk
@@ -264,26 +289,35 @@ async def test_cudf_cluster_device_spill(params):
264
289
  await wait(cdf2)
265
290
 
266
291
  del cdf
292
+ gc.collect()
267
293
 
268
- host_chunks = await client.run(
269
- lambda dask_worker: len(dask_worker.data.host)
294
+ await client.run(
295
+ assert_host_chunks,
296
+ params["spills_to_disk"],
270
297
  )
271
- disk_chunks = await client.run(
272
- lambda dask_worker: len(dask_worker.data.disk or list())
298
+ await client.run(
299
+ assert_disk_chunks,
300
+ params["spills_to_disk"],
273
301
  )
274
- for hc, dc in zip(host_chunks.values(), disk_chunks.values()):
275
- if params["spills_to_disk"]:
276
- assert dc > 0
277
- else:
278
- assert hc > 0
279
- assert dc == 0
280
302
 
281
303
  await client.run(
282
- lambda dask_worker: worker_assert(dask_worker, nbytes, 32, 2048)
304
+ worker_assert,
305
+ nbytes,
306
+ 32,
307
+ 2048,
283
308
  )
284
309
 
285
310
  del cdf2
286
311
 
287
- await client.run(
288
- lambda dask_worker: delayed_worker_assert(dask_worker, 0, 0, 0)
289
- )
312
+ while True:
313
+ try:
314
+ await client.run(
315
+ delayed_worker_assert,
316
+ 0,
317
+ 0,
318
+ 0,
319
+ )
320
+ except AssertionError:
321
+ gc.collect()
322
+ else:
323
+ break
@@ -18,7 +18,7 @@ import dask
18
18
  import distributed # noqa: required for dask.config.get("distributed.comm.ucx")
19
19
  from dask.config import canonical_name
20
20
  from dask.utils import format_bytes, parse_bytes
21
- from distributed import Worker, wait
21
+ from distributed import Worker, WorkerPlugin, wait
22
22
  from distributed.comm import parse_address
23
23
 
24
24
  try:
@@ -32,7 +32,7 @@ except ImportError:
32
32
  yield
33
33
 
34
34
 
35
- class CPUAffinity:
35
+ class CPUAffinity(WorkerPlugin):
36
36
  def __init__(self, cores):
37
37
  self.cores = cores
38
38
 
@@ -40,7 +40,7 @@ class CPUAffinity:
40
40
  os.sched_setaffinity(0, self.cores)
41
41
 
42
42
 
43
- class RMMSetup:
43
+ class RMMSetup(WorkerPlugin):
44
44
  def __init__(
45
45
  self,
46
46
  initial_pool_size,
@@ -135,7 +135,7 @@ class RMMSetup:
135
135
  rmm.mr.set_current_device_resource(rmm.mr.TrackingResourceAdaptor(mr))
136
136
 
137
137
 
138
- class PreImport:
138
+ class PreImport(WorkerPlugin):
139
139
  def __init__(self, libraries):
140
140
  if libraries is None:
141
141
  libraries = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dask-cuda
3
- Version: 23.12.0a231004
3
+ Version: 23.12.0a231005
4
4
  Summary: Utilities for Dask and CUDA interactions
5
5
  Author: NVIDIA Corporation
6
6
  License: Apache-2.0
@@ -7,7 +7,7 @@ requires = [
7
7
 
8
8
  [project]
9
9
  name = "dask-cuda"
10
- version = "23.12.00a231004"
10
+ version = "23.12.00a231005"
11
11
  description = "Utilities for Dask and CUDA interactions"
12
12
  readme = { file = "README.md", content-type = "text/markdown" }
13
13
  authors = [