|
@@ -1,83 +1,103 @@ |
|
|
|
|
|
import os |
|
|
import pytest |
|
|
import pytest |
|
|
|
|
|
|
|
|
from fastNLP.envs.set_backend import set_env |
|
|
|
|
|
from fastNLP.envs.set_env_on_import import set_env_on_import_paddle |
|
|
|
|
|
|
|
|
|
|
|
set_env_on_import_paddle() |
|
|
|
|
|
set_env("paddle") |
|
|
|
|
|
import paddle |
|
|
|
|
|
|
|
|
os.environ["FASTNLP_BACKEND"] = "paddle" |
|
|
|
|
|
|
|
|
|
|
|
from fastNLP.core.drivers import PaddleSingleDriver, PaddleFleetDriver |
|
|
from fastNLP.core.drivers.paddle_driver.initialize_paddle_driver import initialize_paddle_driver |
|
|
from fastNLP.core.drivers.paddle_driver.initialize_paddle_driver import initialize_paddle_driver |
|
|
from fastNLP.core.drivers.paddle_driver.single_device import PaddleSingleDriver |
|
|
|
|
|
from fastNLP.core.drivers.paddle_driver.fleet import PaddleFleetDriver |
|
|
|
|
|
from tests.helpers.models.paddle_model import PaddleNormalModel_Classification |
|
|
|
|
|
|
|
|
from fastNLP.envs import get_gpu_count |
|
|
|
|
|
from tests.helpers.models.paddle_model import PaddleNormalModel_Classification_1 |
|
|
|
|
|
from tests.helpers.utils import magic_argv_env_context |
|
|
|
|
|
|
|
|
|
|
|
import paddle |
|
|
|
|
|
|
|
|
def test_incorrect_driver(): |
|
|
def test_incorrect_driver(): |
|
|
|
|
|
|
|
|
|
|
|
model = PaddleNormalModel_Classification_1(2, 100) |
|
|
with pytest.raises(ValueError): |
|
|
with pytest.raises(ValueError): |
|
|
driver = initialize_paddle_driver("torch") |
|
|
|
|
|
|
|
|
driver = initialize_paddle_driver("torch", 0, model) |
|
|
|
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
@pytest.mark.parametrize( |
|
|
"device", |
|
|
"device", |
|
|
["cpu", "gpu:0", [1, 2, 3], 0, "gpu:1"] |
|
|
|
|
|
|
|
|
["cpu", "gpu:0", 0, [1]] |
|
|
) |
|
|
) |
|
|
def test_get_single_device(device): |
|
|
|
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
|
|
|
"driver", |
|
|
|
|
|
["paddle"] |
|
|
|
|
|
) |
|
|
|
|
|
def test_get_single_device(driver, device): |
|
|
""" |
|
|
""" |
|
|
测试正常情况下初始化PaddleSingleDriver的情况 |
|
|
测试正常情况下初始化PaddleSingleDriver的情况 |
|
|
""" |
|
|
""" |
|
|
|
|
|
|
|
|
model = PaddleNormalModel_Classification(2, 100) |
|
|
|
|
|
driver = initialize_paddle_driver("paddle", device, model) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
model = PaddleNormalModel_Classification_1(2, 100) |
|
|
|
|
|
driver = initialize_paddle_driver(driver, device, model) |
|
|
assert isinstance(driver, PaddleSingleDriver) |
|
|
assert isinstance(driver, PaddleSingleDriver) |
|
|
|
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
@pytest.mark.parametrize( |
|
|
"device", |
|
|
"device", |
|
|
["cpu", "gpu:0", [1, 2, 3], 0, "gpu:1"] |
|
|
|
|
|
|
|
|
[0, 1] |
|
|
) |
|
|
) |
|
|
def test_get_single_device_with_visiblde_devices(device): |
|
|
|
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
|
|
|
"driver", |
|
|
|
|
|
["fleet"] |
|
|
|
|
|
) |
|
|
|
|
|
@magic_argv_env_context |
|
|
|
|
|
def test_get_fleet_2(driver, device): |
|
|
""" |
|
|
""" |
|
|
测试 CUDA_VISIBLE_DEVICES 启动时初始化PaddleSingleDriver的情况 |
|
|
|
|
|
|
|
|
测试 fleet 多卡的初始化情况 |
|
|
""" |
|
|
""" |
|
|
# TODO |
|
|
|
|
|
|
|
|
|
|
|
model = PaddleNormalModel_Classification(2, 100) |
|
|
|
|
|
driver = initialize_paddle_driver("paddle", device, model) |
|
|
|
|
|
|
|
|
model = PaddleNormalModel_Classification_1(64, 10) |
|
|
|
|
|
driver = initialize_paddle_driver(driver, device, model) |
|
|
|
|
|
|
|
|
assert isinstance(driver, PaddleSingleDriver) |
|
|
|
|
|
|
|
|
assert isinstance(driver, PaddleFleetDriver) |
|
|
|
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
@pytest.mark.parametrize( |
|
|
"device", |
|
|
"device", |
|
|
[[1, 2, 3]] |
|
|
|
|
|
|
|
|
[[0, 2, 3], -1] |
|
|
|
|
|
) |
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
|
|
|
"driver", |
|
|
|
|
|
["paddle", "fleet"] |
|
|
) |
|
|
) |
|
|
def test_get_fleet(device): |
|
|
|
|
|
|
|
|
@magic_argv_env_context |
|
|
|
|
|
def test_get_fleet(driver, device): |
|
|
""" |
|
|
""" |
|
|
测试 fleet 多卡的初始化情况 |
|
|
测试 fleet 多卡的初始化情况 |
|
|
""" |
|
|
""" |
|
|
|
|
|
|
|
|
model = PaddleNormalModel_Classification(2, 100) |
|
|
|
|
|
driver = initialize_paddle_driver("paddle", device, model) |
|
|
|
|
|
|
|
|
model = PaddleNormalModel_Classification_1(64, 10) |
|
|
|
|
|
driver = initialize_paddle_driver(driver, device, model) |
|
|
|
|
|
|
|
|
assert isinstance(driver, PaddleFleetDriver) |
|
|
assert isinstance(driver, PaddleFleetDriver) |
|
|
|
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
@pytest.mark.parametrize( |
|
|
"device", |
|
|
|
|
|
[[1,2,3]] |
|
|
|
|
|
|
|
|
("driver", "device"), |
|
|
|
|
|
[("fleet", "cpu")] |
|
|
) |
|
|
) |
|
|
def test_get_fleet(device): |
|
|
|
|
|
|
|
|
@magic_argv_env_context |
|
|
|
|
|
def test_get_fleet_cpu(driver, device): |
|
|
""" |
|
|
""" |
|
|
测试 launch 启动 fleet 多卡的初始化情况 |
|
|
|
|
|
|
|
|
测试试图在 cpu 上初始化分布式训练的情况 |
|
|
""" |
|
|
""" |
|
|
# TODO |
|
|
|
|
|
|
|
|
|
|
|
model = PaddleNormalModel_Classification(2, 100) |
|
|
|
|
|
driver = initialize_paddle_driver("paddle", device, model) |
|
|
|
|
|
|
|
|
|
|
|
assert isinstance(driver, PaddleFleetDriver) |
|
|
|
|
|
|
|
|
model = PaddleNormalModel_Classification_1(64, 10) |
|
|
|
|
|
with pytest.raises(ValueError): |
|
|
|
|
|
driver = initialize_paddle_driver(driver, device, model) |
|
|
|
|
|
|
|
|
def test_device_out_of_range(device): |
|
|
|
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
|
|
|
"device", |
|
|
|
|
|
[-2, [0, get_gpu_count() + 1, 3], [-2], get_gpu_count() + 1] |
|
|
|
|
|
) |
|
|
|
|
|
@pytest.mark.parametrize( |
|
|
|
|
|
"driver", |
|
|
|
|
|
["paddle", "fleet"] |
|
|
|
|
|
) |
|
|
|
|
|
@magic_argv_env_context |
|
|
|
|
|
def test_device_out_of_range(driver, device): |
|
|
""" |
|
|
""" |
|
|
测试传入的device超过范围的情况 |
|
|
测试传入的device超过范围的情况 |
|
|
""" |
|
|
""" |
|
|
pass |
|
|
|
|
|
|
|
|
model = PaddleNormalModel_Classification_1(2, 100) |
|
|
|
|
|
with pytest.raises(ValueError): |
|
|
|
|
|
driver = initialize_paddle_driver(driver, device, model) |