Saya menjalankan kode berikut pada colab yang diambil dari contoh di sini: https://huggingface. co/transformers/model_doc/albert.html#albertformaskedlm

import os
import torch
import torch_xla
import torch_xla.core.xla_model as xm

assert os.environ['COLAB_TPU_ADDR']

dev = xm.xla_device()

from transformers import AlbertTokenizer, AlbertForMaskedLM
import torch

tokenizer = AlbertTokenizer.from_pretrained('albert-base-v2')
model = AlbertForMaskedLM.from_pretrained('albert-base-v2').to(dev)
input_ids = torch.tensor(tokenizer.encode("Hello, my dog is cute", add_special_tokens=True)).unsqueeze(0)  # Batch size 1

data = input_ids.to(dev)

outputs = model(data, masked_lm_labels=data)
loss, prediction_scores = outputs[:2]

Saya belum melakukan apa pun pada kode contoh kecuali memindahkan input_ids dan model ke perangkat TPU menggunakan .to(dev). Sepertinya semuanya dipindahkan ke TPU tidak ada masalah seperti ketika saya memasukkan data saya mendapatkan output berikut: tensor([[ 2, 10975, 15, 51, 1952, 25, 10901, 3]], device='xla:1')

Namun ketika saya menjalankan kode ini saya mendapatkan kesalahan berikut:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-5-f756487db8f7> in <module>()
      1 
----> 2 outputs = model(data, masked_lm_labels=data)
      3 loss, prediction_scores = outputs[:2]

9 frames
/usr/local/lib/python3.6/dist-packages/transformers/modeling_albert.py in forward(self, hidden_states, attention_mask, head_mask)
    277         attention_output = self.attention(hidden_states, attention_mask, head_mask)
    278         ffn_output = self.ffn(attention_output[0])
--> 279         ffn_output = self.activation(ffn_output)
    280         ffn_output = self.ffn_output(ffn_output)
    281         hidden_states = self.full_layer_layer_norm(ffn_output + attention_output[0])

RuntimeError: Unknown device

Ada yang tau apa yang terjadi?

1
Gog 11 April 2020, 16:09

1 menjawab

Jawaban Terbaik

Solusi ada di sini: https://github.com/pytorch/xla/issues/1909

Sebelum memanggil model.to(dev), Anda perlu memanggil xm.send_cpu_data_to_device(model, xm.xla_device()):

model = AlbertForMaskedLM.from_pretrained('albert-base-v2')
model = xm.send_cpu_data_to_device(model, dev)
model = model.to(dev)

Ada juga beberapa masalah dengan mendapatkan fungsi aktivasi gelu yang digunakan ALBERT untuk bekerja di TPU, jadi Anda perlu menggunakan cabang transformator berikut saat bekerja di TPU: https://github.com/huggingface/transformers/tree/fix-jit-tpu

Lihat notebook colab berikut (oleh https://github.com/jysohn23) untuk solusi lengkap: https://colab.research .google.com/gist/jysohn23/68d620cda395eab66289115169f43900/getting-started-with-pytorch-on-cloud-tpus.ipynb

1
Gog 15 April 2020, 10:27