코드 에러 원인 및 해결방법

문주은·2022년 4월 14일
0

1. 에러명 : Internal Error

1-1. 상세 에러

InternalError : 2 root error(s) found.
(0) Internal : Blas GEMM launch failed
[[node model/dense_1/Matmul]]
[[gradient_tape/model/tf_op_layer_stack/unstack/_132]]]
(1) Internal : Blas GEMM launch failed
[[node model/dense_1/Matmul]]

1-2. 에러 원인

NVIDIA GPU가 로컬에 있지만 사용되지 않고 CPU 환경에서 모델을 학습시킬 때 발생

1-3. 해결 방법

# CPU 사용
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

2. 에러명 : Syntex Error

2-1. 상세 에러

SyntexError : non-default argument follows deault argument

2-2. 에러 원인

함수에서 미리 지정한 파라미터는 그렇지 않은 것보다 반드시 뒤에 와야 한다. 즉, default argument가 positional argument보다 뒤에 와야 한다.

2-3. 해결 방법

# AS-IS
def __init__(self, param1, param2=None, param3):
	self.param1=param1
    self.param2='AAA'
    self.param3='BBB'
    
# TO-BE
def __init__(self, param1, param3, param2=None):
	self.param1=param1
    self.param3='BBB'
    self.param2='AAA'    

3. 에러명 : TypeError

3-1. 상세 에러

TypeError: the JSON object must be str, bytes or bytearray, not list

3-2. 에러 원인

1) API request Body에서 --data에 json type의 데이터 request
2) request 받는 쪽에서 "{...}" string type으로 묶여진 json data로 받음
3) return await bentoml_runner.async_run(data) 실행 시 ['"', '{', '\', '"', 'l', 'a', 'b', 'e', 'l', '\'...] 형태로 데이터 전송 되는 문제점

3-3. 해결 방법

  • bentoml code 사용 중
## AS-IS ##
@predict_svc.api(
    input=bentoml.io.JSON(),
    output=bentoml.io.NumpyNdarray()
)
# input_arr param : str type
async def predict(input_arr):
    print(f"intput_arr : {intput_arr}")
    return await predict_runner.async_run(input_arr)
    
# input_json param : list type
def get_predict(input_json):
	print(f"input_json: {input_json}")
# print #
input_arr : {"label": "male", "mask": [[true], [true], [true], [true], [true], [true]]}

input_json : ['"', '{', '\\', '"', 'l', 'a', 'b', 'e', 'l', '\\', '"', ':', ' ', '\\', '"', 'm', 'a', 'l', 'e', '\\', '"', ',', ' ', '\\', '"', 'm', 'a', 's', 'k', '\\', '"', ':', ' ', '[', '[', 't', 'r', 'u', 'e', ']', ',', ' ', '[
', 't', 'r', 'u', 'e', ']', ',', ' ', '[', 't', 'r', 'u', 'e', ']', ... ]
## TO-BE ##
@predict_svc.api(
    input=bentoml.io.JSON(),
    output=bentoml.io.NumpyNdarray()
)
# input_arr param : str type
async def predict(input_arr):
    print(f"intput_arr : {intput_arr}")
    return await predict_runner.async_run(input_arr)
    
# input_json param : list type
def get_predict(input_json):
	data = json.loads(''.join(input_json))
    print(f"data : {data}")
# print #
input_arr : {"label": "male", "mask": [[true], [true], [true], [true], [true], [true]]}

data : {"label": "male", "mask": [[true], [true], [true], [true], [true], [true]]}

4. 에러명 : Module Not Found Error

4-1. 상세 에러

ModuleNotFoundError: No module named pymysql

ModuleNotFoundError: No module named 'sklearn'

4-2. 해결 방법

> sudo python3 -m pip install pymysql
> conda install scikit-learn
> pip install -U scikit-learn

5. 에러명: docker failed to create LLB definition

5-1. 상세 에러

failed to solve with frontend dockerfile.v0: failed to create LLB definition: rpc error: code = Unknown desc = error getting credentials - err: fork/exec /usr/bin/docker-credential-desktop.exe: exec format error, out: ``

5-2. 에러 원인

  • docker 이미지를 빌드하는 과정에서 발생
  • BuildKit은 Docker의 새로운 빌드 엔진으로, 성능 및 기능적인 향상을 제공하는데, 이는 일부 환경에서 호환성 문제가 발생했기 때문
  • BuildKit을 사용하지 않도록 설정

5-3. 해결 방법

> export DOCKER_BUILDKIT=0
> export COMPOSE_DOCKER_CLI_BUILD=0 
profile
Data Engineer

0개의 댓글