Calibrator.collect_data runtime.PanicException: not implemented: array

현재 저희 모델 forward() 가 여러 개의 argument 를 받고 각 argument 는 사이즈가 다른 tensor 입니다. 아래와 같이 torch.onnx.export 을 했습니다.


문제는 calibration 때 우선 1) 첫번째 argument 인 state_problems_list 는 List[tensor] 인지 onnx 모델에서 사라진거 같아서 나머지 6개를 넣었는데 아래와 같은 에러 메세지가 나옵니다:

혹시 calibrator.collect_data 에 여러 argument 를 넣을 수 있을까요?

안녕하세요, FuriosaAI 김종욱입니다.

collect_data 함수에 여러 argument를 넣는 것은 가능합니다.
다만 발생하고 있는 에러에 대하여 추가적으로 확인해보려고 하는데, 혹시 에러가 발생하는 onnx 파일을 아래 메일로 공유해주실 수 있으신지요?

jongwook.kim@furiosa.ai

추가로, pip list | grep furiosa 를 통해 현재 사용하고 계시는 python sdk 버전을 공유해주신 다면 큰 도움이 될 것 같습니다.

onnx 모델과 퓨리오사 버젼 보냈습니다!

발생한 문제에 대하여 원인은 알아내었습니다.

원인은 현재 SDK 에서는 입력으로 int64 타입을 입력으로 가지는 경우 지원을 하지 않고 있어서 발생하고 있었습니다.
즉 onnx 모델에서 int64 타입을 가지는 입력 (stage_idx, stage_machine_idx)이 존재하여 발생하는 문제입니다.

해결방법으로는 해당 입력의 타입을 int32 혹은 uint32 등으로 변경하여 사용하신다면 해결이 가능할 것 같습니다. 혹시 해당 방법 적용이 어려우신 상황이신지 여쭤봅니다.

2 Likes

안녕하세요,

int32 로 우선 고쳐보려고 하는데 또 다른 문제는 제가 onnx 모델을 만들 때 첫 argument 에 Tuple(torch.Tensor) 를 포함해 총 7개 argument 를 넣었는데 calibration.collect_data 에서는 6 input 만 받는다고 하는데 혹시 이 문제는 어떻게 고치나요?

공유해주셨었던 onnx 모델을 보았을때 torch.onnx.export 시에 Tuple로 설정한 첫번째 argument가 입력 텐서로 되지 않고 변경이 된 것으로 보입니다.

혹시 첫번째 argument로 설정하셨던 problems_list의 튜플의 원소가 몇개로 이루어져 있는지, 크기가 가변적인게 아니라 고정인지 여쭤보아도 되나요?

위 코드에서는 튜플 원소가 3개이며 크기는 가변적입니다. forward() 함수 안에 for loop 으로 여러 embedding 을 뽑고 있습니다.

우선 현재 저희 Warboy에서는 가변적인 크기에 대한 입력을 지원하고 있지 않아, 해당 부분에 대한 onnx 변환이 정상적으로 이루어지더라도 문제가 발생할 여지가 있을 것 같습니다.

embedding 이후의 결과는 혹시 가변적인것이 아니라, 고정되어 있다면 forward() 함수 안에 있는 가변적 입력을 처리하는 for loop 부분을 모델 바깥으로 위치한 다음, 입력으로 embedding 결과를 받도록 처리하면 해결될 것으로 보입니다.

2 Likes