2012-03-11 46 views
6

Chúng tôi là sinh viên đang cố gắng xử lý kích thước dữ liệu khoảng 140 triệu bản ghi và cố gắng chạy vài thuật toán học máy. Chúng tôi là newbie cho toàn bộ các giải pháp đám mây và triển khai mahout. Hiện tại chúng tôi đã thiết lập chúng trong cơ sở dữ liệu postgresql nhưng việc triển khai hiện tại không mở rộng quy mô và hoạt động đọc/ghi dường như rất chậm sau nhiều điều chỉnh hiệu suất. đi cho các dịch vụ dựa trên đám mây.Amazon EC2 vs PiCloud

Chúng tôi đã khám phá một vài lựa chọn thay thế có thể. dịch vụ

  1. Amazon đám mây dựa trên (thực hiện Mahout)
  2. Picloud với scikits học (chúng tôi đang lên kế hoạch để sử dụng định dạng HDF5 với NumPy)
  3. Xin giới thiệu bất kỳ lựa chọn thay thế khác nếu có.

Dưới đây là các câu hỏi sau

  1. nào sẽ mang lại kết quả tốt hơn chúng tôi (xoay quanh thời gian) và sẽ được chi phí hiệu quả? Xin vui lòng đề cập đến chúng tôi bất kỳ lựa chọn thay thế khác hiện nay.
  2. Trong trường hợp chúng tôi thiết lập dịch vụ amazon, chúng tôi nên có định dạng dữ liệu như thế nào? Nếu chúng ta sử dụng dynamodb thì chi phí sẽ tăng lên?

Cảm ơn

Trả lời

5

PiCloud được xây dựng trên đầu trang của AWS, do đó bạn có thể sử dụng Amazon vào cuối ngày. Câu hỏi đặt ra là bạn sẽ phải viết bao nhiêu cơ sở hạ tầng để tự viết mọi thứ có dây với nhau. PiCloud cung cấp một số sử dụng miễn phí để đặt nó thông qua các bước để bạn có thể cho nó bắn ban đầu. Tôi đã không sử dụng nó bản thân mình nhưng rõ ràng họ đang cố gắng để cung cấp dễ dàng triển khai cho các ứng dụng máy học tập loại. Có vẻ như điều này đang cố gắng cho kết quả, không phải là một dự án đám mây, vì vậy tôi sẽ xem xét sử dụng một trong các dịch vụ khác của Amazon bên cạnh EC2 hoặc một số phần mềm khác như PiCloud hoặc Heroku hoặc dịch vụ khác chăm sóc bootstrapping.

7

Tùy thuộc vào bản chất của vấn đề học máy bạn muốn giải quyết. Tôi khuyên bạn trước tiên nên subsample tập dữ liệu của bạn cho dữ liệu phù hợp với bộ nhớ (ví dụ: 100 nghìn mẫu có vài trăm tính năng khác 0 cho mỗi mẫu giả định một biểu diễn thưa thớt).

Sau đó, hãy thử một vài thuật toán học máy mà mở rộng để số lượng lớn các mẫu trong scikit-học:

  • SGDClassifier hoặc MultinomialNB nếu bạn muốn làm phân loại có giám sát (nếu bạn có nhãn phân loại để dự đoán trong của bạn tập dữ liệu)
  • SGDRegressor nếu bạn muốn thực hiện hồi quy có giám sát (nếu bạn có biến mục tiêu liên tục để dự đoán)
  • MiniBatchKMeans clustering để làm clustering không giám sát (nhưng sau đó không có cách khách quan để định lượng chất lượng của các cụm kết quả theo mặc định).
  • ...

Thực hiện tìm kiếm lưới để tìm các giá trị tối ưu của các siêu của mô hình (ví dụ như các regularizer alpha và số lượng đi n_iter cho SGDClassifier) ​​và đánh giá hiệu quả sử dụng cross-validation.

Sau khi hoàn tất, thử lại với bộ dữ liệu lớn hơn 2x (vẫn còn phù hợp trong bộ nhớ) và xem liệu nó có cải thiện độ chính xác dự đoán đáng kể hay không. Nếu nó không phải là trường hợp sau đó không lãng phí thời gian của bạn cố gắng để song song này trên một cụm để chạy mà trên tập dữ liệu đầy đủ vì nó sẽ không mang lại bất kỳ kết quả tốt hơn.

Nếu nó làm những gì bạn có thể làm, là Shard dữ liệu thành từng mảnh, sau đó lát dữ liệu trên mỗi nút, tìm hiểu về SGDClassifier hoặc SGDRegressor mô hình trên mỗi nút một cách độc lập với picloud và thu thập lại các trọng số (coef_intercept_) và sau đó tính trọng số trung bình để xây dựng mô hình tuyến tính cuối cùng và đánh giá nó trên một số tập hợp được lưu giữ trong tập dữ liệu của bạn.

Để tìm hiểu thêm về phân tích lỗi. Có xem làm thế nào để vẽ đường cong học tập:

0

Bạn nên có một cái nhìn tại numba nếu bạn đang tìm kiếm một số up tốc độ NumPy: https://github.com/numba/numba

Không giải quyết vấn đề mở rộng quy mô đám mây của bạn, nhưng có thể giảm thời gian tính toán.

-1

Tôi vừa tạo comparison giữa PiCloud & Amazon EC2> có thể hữu ích.