如何减少 Lambda 的大小 Layers/workaround R 包的大小 limit/reduce?
How to reduce size of Lambda Layers/workaround the size limit/reduce size of R packages?
我是 AWS Lambda 上的 运行 R。我一直在为 R 脚本使用的包制作一层。以下是套餐:
install.packages(c("magrittr", "lubridate", "dplyr", "readr", "tidyr",
"aws.s3", "readxl", "here", "stringr"),
lib = '/opt/R/new_library/R/library/')
但是随后生成的文件夹超过了 250 MB,这是 Lambda 的限制。
因此,我想知道我的选择是什么:
- 从 R 的角度来看,有什么方法可以减少安装包的大小吗?例如,BH 和 stringi(必须是依赖项)的大小超过 150 mb
- 从 AWS 的角度来看,对于此 lambda 大小限制是否有任何解决方法?我可以使用 EFS 来提供帮助吗?
非常感谢
这很复杂,但程序包通常不会根据安装大小限制进行编程(但请参阅示例 what we said about the tinyverse 和一些关于一般依赖性的想法)。
考虑 data.table
没有依赖关系,而 dplyr
有很多 - 我并不是说你 必须 重写你的脚本,但它是一个 可能方法。
我也是 BH
的维护者,是的,它的影响很大。更糟糕的是,我们不需要 run-time (!!) 所以你可以(非常彻底地)rm -rf
它的 headers。您将无法再 编译 但已经构建的会 运行.
最后,这是主要提示:考虑二进制文件。你有 RSPM 和 BSPM,我已经写了 a few blog posts and videos 关于这个主题——向下滚动查看一些。我是 Rutter PPA 的忠实粉丝和大用户,它为您提供了上述内容(可能带有 aws.s3
软件包)作为准备安装的二进制文件——而 BSPM 使它从 install.packages()
.[=22 变得容易=]
编辑 所以为了争论起见,我启动了 rocker/r-bspm:20.04
并且大多数包以二进制文件形式到达:
root@b52f4e461ebd:/# du -csh /usr/lib/R/site-library/*
136K /usr/lib/R/site-library/askpass
140K /usr/lib/R/site-library/assertthat
147M /usr/lib/R/site-library/BH
212K /usr/lib/R/site-library/bspm
212K /usr/lib/R/site-library/cellranger
580K /usr/lib/R/site-library/cli
172K /usr/lib/R/site-library/clipr
840K /usr/lib/R/site-library/cpp11
272K /usr/lib/R/site-library/crayon
320K /usr/lib/R/site-library/curl
516K /usr/lib/R/site-library/digest
2.0M /usr/lib/R/site-library/dplyr
136K /usr/lib/R/site-library/ellipsis
368K /usr/lib/R/site-library/fansi
160K /usr/lib/R/site-library/generics
312K /usr/lib/R/site-library/glue
296K /usr/lib/R/site-library/here
224K /usr/lib/R/site-library/hms
824K /usr/lib/R/site-library/httr
692K /usr/lib/R/site-library/jsonlite
292K /usr/lib/R/site-library/lifecycle
2.2M /usr/lib/R/site-library/littler
1.7M /usr/lib/R/site-library/lubridate
476K /usr/lib/R/site-library/magrittr
140K /usr/lib/R/site-library/mime
3.2M /usr/lib/R/site-library/openssl
308K /usr/lib/R/site-library/pillar
116K /usr/lib/R/site-library/pkgconfig
120K /usr/lib/R/site-library/prettyunits
208K /usr/lib/R/site-library/progress
584K /usr/lib/R/site-library/purrr
188K /usr/lib/R/site-library/R6
10M /usr/lib/R/site-library/Rcpp
1.5M /usr/lib/R/site-library/readr
1.7M /usr/lib/R/site-library/readxl
108K /usr/lib/R/site-library/rematch
636K /usr/lib/R/site-library/remotes
1.4M /usr/lib/R/site-library/rlang
300K /usr/lib/R/site-library/rprojroot
1.3M /usr/lib/R/site-library/stringi
456K /usr/lib/R/site-library/stringr
156K /usr/lib/R/site-library/sys
1.7M /usr/lib/R/site-library/tibble
1.5M /usr/lib/R/site-library/tidyr
416K /usr/lib/R/site-library/tidyselect
524K /usr/lib/R/site-library/utf8
1.8M /usr/lib/R/site-library/vctrs
472K /usr/lib/R/site-library/xml2
188M total
root@b52f4e461ebd:/#
所以在 BH
上使用建议的 'post-installation surgery'(同样,它是 build 而不是 运行 time R 的依赖性不区分)你可以将其降低到小于 50mb。
它由从源安装的内容补充:
root@b52f4e461ebd:/# du -csh /usr/local/lib/R/site-library/*
144K /usr/local/lib/R/site-library/askpass
312K /usr/local/lib/R/site-library/aws.s3
168K /usr/local/lib/R/site-library/aws.signature
132K /usr/local/lib/R/site-library/base64enc
2.1M /usr/local/lib/R/site-library/curl
388K /usr/local/lib/R/site-library/docopt
832K /usr/local/lib/R/site-library/httr
696K /usr/local/lib/R/site-library/jsonlite
140K /usr/local/lib/R/site-library/mime
3.2M /usr/local/lib/R/site-library/openssl
160K /usr/local/lib/R/site-library/sys
472K /usr/local/lib/R/site-library/xml2
8.6M total
root@b52f4e461ebd:/#
(其中一些作为二进制文件存在,所以我会更仔细地研究为什么 BSPM 没有选择二进制文件)。
我是 AWS Lambda 上的 运行 R。我一直在为 R 脚本使用的包制作一层。以下是套餐:
install.packages(c("magrittr", "lubridate", "dplyr", "readr", "tidyr",
"aws.s3", "readxl", "here", "stringr"),
lib = '/opt/R/new_library/R/library/')
但是随后生成的文件夹超过了 250 MB,这是 Lambda 的限制。
因此,我想知道我的选择是什么:
- 从 R 的角度来看,有什么方法可以减少安装包的大小吗?例如,BH 和 stringi(必须是依赖项)的大小超过 150 mb
- 从 AWS 的角度来看,对于此 lambda 大小限制是否有任何解决方法?我可以使用 EFS 来提供帮助吗?
非常感谢
这很复杂,但程序包通常不会根据安装大小限制进行编程(但请参阅示例 what we said about the tinyverse 和一些关于一般依赖性的想法)。
考虑 data.table
没有依赖关系,而 dplyr
有很多 - 我并不是说你 必须 重写你的脚本,但它是一个 可能方法。
我也是 BH
的维护者,是的,它的影响很大。更糟糕的是,我们不需要 run-time (!!) 所以你可以(非常彻底地)rm -rf
它的 headers。您将无法再 编译 但已经构建的会 运行.
最后,这是主要提示:考虑二进制文件。你有 RSPM 和 BSPM,我已经写了 a few blog posts and videos 关于这个主题——向下滚动查看一些。我是 Rutter PPA 的忠实粉丝和大用户,它为您提供了上述内容(可能带有 aws.s3
软件包)作为准备安装的二进制文件——而 BSPM 使它从 install.packages()
.[=22 变得容易=]
编辑 所以为了争论起见,我启动了 rocker/r-bspm:20.04
并且大多数包以二进制文件形式到达:
root@b52f4e461ebd:/# du -csh /usr/lib/R/site-library/*
136K /usr/lib/R/site-library/askpass
140K /usr/lib/R/site-library/assertthat
147M /usr/lib/R/site-library/BH
212K /usr/lib/R/site-library/bspm
212K /usr/lib/R/site-library/cellranger
580K /usr/lib/R/site-library/cli
172K /usr/lib/R/site-library/clipr
840K /usr/lib/R/site-library/cpp11
272K /usr/lib/R/site-library/crayon
320K /usr/lib/R/site-library/curl
516K /usr/lib/R/site-library/digest
2.0M /usr/lib/R/site-library/dplyr
136K /usr/lib/R/site-library/ellipsis
368K /usr/lib/R/site-library/fansi
160K /usr/lib/R/site-library/generics
312K /usr/lib/R/site-library/glue
296K /usr/lib/R/site-library/here
224K /usr/lib/R/site-library/hms
824K /usr/lib/R/site-library/httr
692K /usr/lib/R/site-library/jsonlite
292K /usr/lib/R/site-library/lifecycle
2.2M /usr/lib/R/site-library/littler
1.7M /usr/lib/R/site-library/lubridate
476K /usr/lib/R/site-library/magrittr
140K /usr/lib/R/site-library/mime
3.2M /usr/lib/R/site-library/openssl
308K /usr/lib/R/site-library/pillar
116K /usr/lib/R/site-library/pkgconfig
120K /usr/lib/R/site-library/prettyunits
208K /usr/lib/R/site-library/progress
584K /usr/lib/R/site-library/purrr
188K /usr/lib/R/site-library/R6
10M /usr/lib/R/site-library/Rcpp
1.5M /usr/lib/R/site-library/readr
1.7M /usr/lib/R/site-library/readxl
108K /usr/lib/R/site-library/rematch
636K /usr/lib/R/site-library/remotes
1.4M /usr/lib/R/site-library/rlang
300K /usr/lib/R/site-library/rprojroot
1.3M /usr/lib/R/site-library/stringi
456K /usr/lib/R/site-library/stringr
156K /usr/lib/R/site-library/sys
1.7M /usr/lib/R/site-library/tibble
1.5M /usr/lib/R/site-library/tidyr
416K /usr/lib/R/site-library/tidyselect
524K /usr/lib/R/site-library/utf8
1.8M /usr/lib/R/site-library/vctrs
472K /usr/lib/R/site-library/xml2
188M total
root@b52f4e461ebd:/#
所以在 BH
上使用建议的 'post-installation surgery'(同样,它是 build 而不是 运行 time R 的依赖性不区分)你可以将其降低到小于 50mb。
它由从源安装的内容补充:
root@b52f4e461ebd:/# du -csh /usr/local/lib/R/site-library/*
144K /usr/local/lib/R/site-library/askpass
312K /usr/local/lib/R/site-library/aws.s3
168K /usr/local/lib/R/site-library/aws.signature
132K /usr/local/lib/R/site-library/base64enc
2.1M /usr/local/lib/R/site-library/curl
388K /usr/local/lib/R/site-library/docopt
832K /usr/local/lib/R/site-library/httr
696K /usr/local/lib/R/site-library/jsonlite
140K /usr/local/lib/R/site-library/mime
3.2M /usr/local/lib/R/site-library/openssl
160K /usr/local/lib/R/site-library/sys
472K /usr/local/lib/R/site-library/xml2
8.6M total
root@b52f4e461ebd:/#
(其中一些作为二进制文件存在,所以我会更仔细地研究为什么 BSPM 没有选择二进制文件)。