#ipu #popart
#ipu #popart
Вопрос:
Я написал очень простую программу PopART, используя интерфейс C , но каждый раз, когда я пытаюсь скомпилировать ее для запуска на устройстве IPU, я получаю следующую ошибку:
terminate called after throwing an instance of ‘popart::error’
what(): Could not find loss tensor ‘L1:0’ in main graph tensors
Я определяю потери в своей программе следующим образом:
auto loss = builder->aiGraphcoreOpset1().l1loss({outputs[0]}, 0.1f, popart::ReductionType::Sum, “l1LossVal”);
Что-то не так с моим определением потерь, в результате чего оно удаляется из графика? Я следовал той же структуре, что и один из приведенных здесь примеров Graphcore.
Ответ №1:
Эта ошибка обычно возникает, когда прототип модели, который вы передаете объектам TrainingSession
или InferenceSession
, не содержит тензор потерь. Распространенной причиной этого является вызов builder->getModelProto()
перед добавлением тензора потерь в график. Чтобы убедиться, что ваш тензор потерь является частью protobuf, ваши вызовы должны быть в следующем порядке:
...
auto loss = builder->aiGraphcoreOpset1().l1loss(...);
auto proto = builder->getModelProto();
auto session = popart::TrainingSession::createFromOnnxModel(...);
...
Ключевым моментом является то, что getModelProto()
вызов должен быть последним вызовом из builder
интерфейса перед настройкой сеанса PopART.