code: def test_step_pure_fp16_multigpu():
      if not torch.cuda.device_count() > 1:
          return
      weight = torch.randn(10, 5).half().cuda(0).requires_grad_()
      bias = torch.randn(10).half().cuda(1).requires_grad_()
      input = torch.randn(5).half().cuda(0)
      optimizer = Adam(
          [weight, bias], lr=1e-3, precision=Precision.PURE_FP16
      )
  
      step_test(optimizer, weight, bias, input)
  
      assert optimizer.state[weight]["exp_avg"].dtype == torch.float16
      assert (
          optimizer.state[weight]["exp_avg_sq"].dtype == torch.float16
      )
      assert optimizer.state[bias]["exp_avg"].dtype == torch.float16
      assert optimizer.state[bias]["exp_avg_sq"].dtype == torch.float16
  
imports: from copy import deepcopy
  import functools
  import pytest
  import torch
label_desc: Use image node_id 13 for calling a global function with example usage: test_step_pure_fp16_multigpu() without return types