leetcode에서 문제를 풀고 있는데 이런 에러를 만났다.
메모리 에러라고 한다. 사실 이런 에러는 오늘 처음 만났다. MemoryError 라는게 있었는지도 몰랐는데 오늘 발생하고 나서야 이런게 있다는 것을 알게 되었다.
다이나믹프로그래밍을 짜면서 dp 테이블을 굉장히 크게 만들어줘서 발생한 에러인데 실제로는 처음 봤다.
물론 풀이 방법을 달리해야 하는 것은 당연하지만 이 Memory Error 라는 것이 실제로 다른 곳에서 발생했을 경우 대처하는 방법에 대해서 알아보자.
일반적인 대처방법:
1. 그냥 다시 실행해보자. 때에 따라서 매모리 에러의 경우 그냥 다시 실행하면 잘되는 경우가 있다고 한다.
2. 배치 사이즈를 줄인다. (이건 딥러닝을 사용할 경우를 말하는거다.) 순간적으로 많은 데이터를 처리할 경우 램의 메모리를 순간적으로 소진하는 경우가 있다고 한다. (딥러닝을 사용중이라면 배치 사이즈를 줄여보면 된다. )
3. 시스템 상에서의 페이징 파일 크기를 증가시킨다. 윈도우10 에서 직접 설정을 통해 페이징 파일 크기를 증가시킬 수 있다. (링크: https://dora-guide.com/virtual-memory/) <- 꼭 여기 아니더라도 검색하면 관련 글이 많이 나온다.
4. 추가 램을 장착한다. 가장 근본적인 해결 방법이다.
추가적인 대처방법:
참고로 추가로 확인해볼 사항도 존재한다. 아래의 경우에 메모리 에러가 가능하기 때문에 유심히 살펴보면 좋다.
잘못된 python 버전을 사용할 경우 메모리 오류가 발생할 수도 있다고 한다. 메모리는 충분한데 python이 pc의 전체 메모리에 접근할 수 없기 때문이라고 한다. 그 이유는 사용자가 64비트 컴퓨터에서 32비트 버전의 python을 사용할 경우 이런 문제가 발생 가능하다고 한다. 그래서 혹시나 이유를 알지 못하는 메모리 에러가 계속 발생할 경우 python 버전을 체크하는 것도 좋은 방법이다.
그리고 코드 자체에서 너무 많은 객체를 생성하거나 복제를 너무 많이 하고 있을 수도 있다. 혹시 이런 동작을 하는 코드가 있는지 다시 생각해보자.
또는 프로그램의 코드 상에서 대용량의 파일이나 데이터 세트를 통째로 로드하려고 하는 동작이 있다면 가능하다. 그렇다면 이런 부분에서 최적화를 하는 것이 도움이 될 수 있다. 데이터 세트의 크기를 줄이던 뭔가 다른 방법이 있을 것이다.
또한 코드 상에서 특정 대상을 참조를 하는 것이 아니라 사용할때마다 동일한 데이터에 대해서 복제를 해서 사용하고 있는 경우에도 메모리 에러가 가능하다. 이런 문제는 흔하다. 특히 귀찮아서 짠 코드에서 이런 문제들이 많이 발생한다.
아무튼 보기 드문 Memory Error 라는 친구를 처음으로 만났다. 그리 까다로운 에러는 아닌 듯하다.
아래 블로그를 참고하면 좋을 것이다.
https://growingsaja.tistory.com/477
'Python3 > Python3 lang' 카테고리의 다른 글
[Python3] is와 == 의 차이 (0) | 2022.07.18 |
---|---|
[Python3] Exception has occurred: TypeError argument should be integer or bytes-like object, not 'str' (0) | 2022.06.26 |
[Python3] 코딩테스트 파이썬 사용시 유일한 단점 - 파이썬의 객체 복사 방식(깊은 복사와 얕은 복사) (0) | 2022.03.19 |
[Python3] 파이썬 @cache @lru_cache 데코레이터 (0) | 2022.03.13 |
[Python3] Python 에서 assert 란? (0) | 2021.12.01 |