Post

[Seurat] SCTransform getGlobalsAndPackages error 해결방법

이 글은 Seurat에서 SCTransform()을 사용해서 normalize하는 과정에서 다음과 같은 에러메세지가 나왔을때 해결하는 방법에 대해서 설명한다.

Error message

1
2
3
4
obj <- SCTransform(obj, vars.to.regress = "percent.mt", variable.features.n=2000)

Error in getGlobalsAndPackages(expr, envir = envir, globals = globals) : 
  The total size of the 19 globals exported for future expression (FUN()) is 2.53 GiB.. This exceeds the maximum allowed size of 500.00 MiB (option 'future.globals.maxSize'). The three largest globals are FUN (2.51 GiB of class function), umi_bin (19.27 MiB of class numeric) and data_step1 (504.69 KiB of class list)

R에서 병렬 처리 또는 asynchronous computations을 사용할 때 사용하는 future 패키지에서 발생한 에러. 특정 상황에서 전역 객체(globals)의 크기가 기본적으로 허용된 크기를 초과한 경우 다음과 같은 에러 메시지를 뱉는다.

이 에러메세지를 통해 future 패키지가 병렬 처리 작업을 위해 전달하는 객체의 크기는 기본 500MB로 설정된 것을 알 수 있음. + 필요한 FUN이라는 함수가 2.5GB 로 200MB기준을 넘어서 에러났음.

해결방법

해결하는 방법은 future.globals.maxSize 옵션을 조정하여 허용되는 globals 크기를 늘리는 것.

1
2
# future.globals.maxSize 옵션을 3 GiB로 늘리기
options(future.globals.maxSize = 3 * 1024^3)  # 3 GiB

주의사항

  • 메모리 과부하 방지
    너무 큰 크기를 설정할 경우 시스템 메모리가 부족해질 수 있으므로, 작업에 필요한 최소한의 크기만 설정하는 것이 가장 좋음.
  • 객체 크기 최적화
    만약 함수나 데이터가 지나치게 커진다면, 객체를 최적화하거나 필요한 부분만 병렬 처리로 넘기도록 코드 구조를 개선하는 것도 좋은 방법. input으로 넣은 seurat object자체를 분할해서 처리하는 방법 고려.
This post is licensed under CC BY 4.0 by the author.

© Subin Cho. Some rights reserved.

Using the Chirpy theme for Jekyll.