РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
482 of 769 menu

Метод half

Метод half преобразует все параметры модели (веса и смещения) и буферы в тип данных float16. Это позволяет значительно ускорить вычисления на современных GPU и сократить использование видеопамяти. Метод действует на месте (in-place) и возвращает сам модуль, что удобно для цепочечных вызовов.

Синтаксис

model.half()

Пример

Давайте создадим простую модель и преобразуем её веса в тип float16⁅/⁆:

import torch import torch.nn as nn model = nn.Linear(10, 5) print(model.weight.dtype) model = model.half() print(model.weight.dtype)

Результат выполнения кода:

torch.float32 torch.float16

Пример

Давайте выполним прямой проход через модель после преобразования в float16⁅/⁆:

import torch import torch.nn as nn torch.manual_seed(0) model = nn.Linear(10, 5) model = model.half() x = torch.randn(2, 10).half() out = model(x) print(out.dtype) print(out)

Результат выполнения кода:

torch.float16 tensor([ [ 0.4624, -0.2170, -0.3408, 0.3076, -0.4336], [ 0.1788, -0.2156, -0.4312, 0.0128, 0.1599] ], dtype=torch.float16)

Обратите внимание, что входной тензор также должен быть преобразован в тип float16⁅/⁆ методом half⁅/⁆ перед передачей в модель.

Пример

Давайте сравним потребление памяти до и после преобразования модели:

import torch import torch.nn as nn model = nn.Sequential( nn.Linear(1000, 1000), nn.ReLU(), nn.Linear(1000, 1000) ) param_size = sum(p.numel() for p in model.parameters()) memory_float32 = param_size * 4 / (1024 ** 2) print(f"float32: {memory_float32:.2f} MB") model = model.half() memory_float16 = param_size * 2 / (1024 ** 2) print(f"float16: {memory_float16:.2f} MB")

Результат выполнения кода:

"float32: 7.63 MB" "float16: 3.81 MB"

Пример

Давайте используем метод half⁅/⁆ в сочетании с другими методами преобразования:

import torch import torch.nn as nn model = nn.Linear(10, 5) model = model.half().cuda() print(model.weight.dtype) print(next(model.parameters()).device)

Результат выполнения кода:

torch.float16 "cuda:0"

Смотрите также

  • метод float,
    который преобразует веса модели в тип float32
  • метод double,
    который преобразует веса модели в тип float64
  • метод to,
    который преобразует модель к указанному типу или устройству
  • метод cuda,
    который перемещает модель на GPU
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить