R rừng ngẫu nhiên trên Amazon ec2 Lỗi: không thể phân bổ vectơ kích thước 5,4 Gb


9

Tôi đang đào tạo các mô hình rừng ngẫu nhiên trong R bằng randomForest()1000 cây và khung dữ liệu với khoảng 20 dự đoán và 600K hàng. Trên máy tính xách tay của tôi mọi thứ đều hoạt động tốt, nhưng khi tôi chuyển sang amazon ec2, để chạy cùng một thứ, tôi gặp lỗi:

Error: cannot allocate vector of size 5.4 Gb
Execution halted

Tôi đang sử dụng c3.4xlargeloại cá thể nên nó khá cứng. Có ai biết cách giải quyết cho việc này để chạy nó trong trường hợp này không? Tôi rất muốn biết các sắc thái bộ nhớ chỉ gây ra sự cố này trên phiên bản ec2 chứ không phải trên máy tính xách tay của tôi (Bộ xử lý OS X 10.9.5 2.7 GHz Intel Core i7; Bộ nhớ 16 GB 1600 MHz DDR3)

Cảm ơn.

Câu trả lời:


5

Đây là một số lời khuyên (sử dụng có nguy cơ của riêng bạn!):

Nếu các biện pháp đơn giản được đề cập ở trên không giúp HOẶC bạn muốn đạt được nhiều khả năng mở rộng và / hoặc hiệu suất hơn , bao gồm khả năng song song hóa quy trình trên một máy hoặc trên nhiều máy, hãy xem xét sử dụng bigrfgói R: http: // cran. r-project.org/web/packages/bigrf . Cũng xem cuộc thảo luận này: https://stackoverflow.com/q/1358003/2872891 .


2

Bổ sung cho các ý tưởng khác: giảm dữ liệu của bạn cho đến khi bạn tìm ra những gì bạn có thể chạy trên ví dụ Amazon. Nếu nó không thể thực hiện 100k hàng thì có gì đó rất sai, nếu thất bại ở hàng 590k thì biên của nó.

Ví dụ c3.4xlarge có 30Gb RAM, vì vậy, nó là đủ.


2

Nó luôn hữu ích khi chỉ Google chính xác lỗi mà bạn đang thấy, ngoại trừ các chi tiết cụ thể như bộ nhớ thực của vectơ. Đối với tôi, lần truy cập đầu tiên là một tài liệu thú vị có tên " R: Giới hạn bộ nhớ của R ", trong đó, trong "Unix", người ta có thể đọc:

Giới hạn không gian địa chỉ là dành riêng cho hệ thống: Các hệ điều hành 32 bit áp đặt giới hạn không quá 4Gb: thường là 3Gb. Chạy các tệp thực thi 32 bit trên HĐH 64 bit sẽ có các giới hạn tương tự: Các tệp thực thi 64 bit sẽ có giới hạn cụ thể về hệ thống vô hạn (ví dụ: 128Tb cho Linux trên x86_64 cpus).

Xem trợ giúp của OS / shell về các lệnh như giới hạn hoặc ulimit để biết cách áp đặt các giới hạn đối với các tài nguyên có sẵn cho một quy trình. Ví dụ: người dùng bash có thể sử dụng

ulimit -t 600 -v 4000000

trong khi người dùng csh có thể sử dụng

limit cputime 10m limit vmemoryuse 4096m

để giới hạn quá trình trong 10 phút thời gian CPU và (khoảng) 4Gb bộ nhớ ảo. (Có các tùy chọn khác để đặt RAM đang sử dụng, nhưng chúng thường không được vinh danh.)

Vì vậy, bạn nên kiểm tra

  1. Loại hệ điều hành nào bạn đang chạy trên phiên bản EC2 của bạn
  2. Bạn đang chạy loại xây dựng R nào trên hệ điều hành đó và đảm bảo bạn chạy phiên bản 64 bit
  3. Nếu cả hai đều là 64 bit, thì hãy sử dụng ulimitđể đặt bộ nhớ thành 8Gb:ulimit -v 8000000
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.