Где арендовать GPU в 2025: подборка GPU‑хостингов с адекватной ценой и SLA
В 2025 году аренда видеокарт в облаке становится всё более актуальной альтернативой покупке собственного оборудования. В обзоре представили подборку провайдеров, которые предлагают топовые видеокарты — от NVIDIA V100 и A40 до мощнейших H100 и A100 для создания кластеров до 8 GPU. Многие из них предоставляют фичу — поминутную / почасовую оплату (pay-as-you-go), что делает такое железо доступным физлицам. Например, на VK Cloud предлагаются GPU L4, Tesla V100 и A100 для задач от видеообработки до глубокого обучения, а Cloud.ru предлагает H100, A100, V100 и A40 с возможностью формирования мощных кластеров.
#факт
@zen_of_python
В 2025 году аренда видеокарт в облаке становится всё более актуальной альтернативой покупке собственного оборудования. В обзоре представили подборку провайдеров, которые предлагают топовые видеокарты — от NVIDIA V100 и A40 до мощнейших H100 и A100 для создания кластеров до 8 GPU. Многие из них предоставляют фичу — поминутную / почасовую оплату (pay-as-you-go), что делает такое железо доступным физлицам. Например, на VK Cloud предлагаются GPU L4, Tesla V100 и A100 для задач от видеообработки до глубокого обучения, а Cloud.ru предлагает H100, A100, V100 и A40 с возможностью формирования мощных кластеров.
#факт
@zen_of_python
@pytest.mark.parametrize
: Как параметризировать тестыТестирование кода может быть утомительным процессом. Когда у вас есть множество похожих тестовых случаев, написание отдельных функций для каждого часто приводит к дублированию кода. Именно здесь на помощь приходит функция @pytest.mark.parametrize.
Начнем с простого примера. У нас есть функция
add_nums()
, которая складывает числа из списка:
def add_nums(numbers):
return sum(numbers)
Без parametrize тесты могли бы выглядеть так:
def test_123():
assert add_nums([1, 2, 3]) == 6
def test_negatives():
assert add_nums([1, 2, -3]) == 0
def test_empty():
assert add_nums([]) == 0
Что не так с этим подходом? Дублирование кода: каждая тестовая функция повторяет одну и ту же структуру. Вместо написания трех отдельных функций, мы можем создать одну параметризованную функцию:
import pytest
@pytest.mark.parametrize(
"nums, expected_total",
[
([1, 2, 3], 6),
([1, 2, -3], 0),
([], 0),
]
)
def test_add_nums(nums, expected_total):
assert add_nums(nums) == expected_total
1.
@pytest.mark.parametrize
— это специальный декоратор pytest2. Параметры "
nums, expected_total
" — имена параметров функции3. Тестовые данные — список кортежей, где каждый содержит значения для одного теста
Pytest автоматически вызывает вашу функцию с каждым набором параметров:
# Первый вызов
test_add_nums([1, 2, 3], 6)
# Второй вызов
test_add_nums([1, 2, -3], 0)
# Третий вызов
test_add_nums([], 0)
Результат: 3 отдельных теста, каждый из которых может пройти или упасть.
Кастомные ID для тестов
По умолчанию pytest генерирует автоматические ID для тестов, но они могут быть не очень понятными. Вы можете задать свои:
@pytest.mark.parametrize(
"nums, expected_total",
[
([1, 2, 3], 6),
([1, 2, -3], 0),
([], 0),
],
ids=["positive_numbers", "mixed_numbers", "empty_list"]
)
def test_add_nums(nums, expected_total):
assert add_nums(nums) == expected_total
Теперь при запуске тестов вы увидите:
test_add_nums[positive_numbers] PASSED
test_add_nums[mixed_numbers] PASSED
test_add_nums[empty_list] PASSED
Вложенная параметризация
Можно комбинировать несколько параметризаций:
@pytest.mark.parametrize("x", [1, 2, 3])
@pytest.mark.parametrize("y", [10, 20])
def test_multiply(x, y):
assert x * y == x * y
Это создаст 6 тестов: (1,10), (1,20), (2,10), (2,20), (3,10), (3,20).
#основы
@zen_of_python
👍7