|  | # Copyright 2019 Kakao Brain | 
|  | # | 
|  | # Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. | 
|  | # | 
|  | # This source code is licensed under the BSD license found in the | 
|  | # LICENSE file in the root directory of this source tree. | 
|  | import tempfile | 
|  | import pytest | 
|  |  | 
|  | import torch | 
|  | import torch.distributed as dist | 
|  |  | 
|  | @pytest.fixture(autouse=True) | 
|  | def manual_seed_zero(): | 
|  | torch.manual_seed(0) | 
|  |  | 
|  |  | 
|  | @pytest.fixture(scope="session") | 
|  | def cuda_sleep(): | 
|  | # Warm-up CUDA. | 
|  | torch.empty(1, device="cuda") | 
|  |  | 
|  | # From test/test_cuda.py in PyTorch. | 
|  | start = torch.cuda.Event(enable_timing=True) | 
|  | end = torch.cuda.Event(enable_timing=True) | 
|  | start.record() | 
|  | torch.cuda._sleep(1000000) | 
|  | end.record() | 
|  | end.synchronize() | 
|  | cycles_per_ms = 1000000 / start.elapsed_time(end) | 
|  |  | 
|  | def cuda_sleep(seconds): | 
|  | torch.cuda._sleep(int(seconds * cycles_per_ms * 1000)) | 
|  |  | 
|  | return cuda_sleep | 
|  |  | 
|  |  | 
|  | def pytest_report_header(): | 
|  | return f"torch: {torch.__version__}" | 
|  |  | 
|  | @pytest.fixture | 
|  | def setup_rpc(scope="session"): | 
|  | file = tempfile.NamedTemporaryFile() | 
|  | dist.rpc.init_rpc( | 
|  | name="worker0", | 
|  | rank=0, | 
|  | world_size=1, | 
|  | rpc_backend_options=dist.rpc.TensorPipeRpcBackendOptions( | 
|  | init_method=f"file://{file.name}", | 
|  | ) | 
|  | ) | 
|  | yield | 
|  | dist.rpc.shutdown() | 
|  |  | 
|  | def pytest_ignore_collect(path, config): | 
|  | "Skip this directory if distributed modules are not enabled." | 
|  | return not dist.is_available() |