Cách chọn hoặc lưu trữ phiên máy tính xách tay Jupyter (IPython) cho sau này


101

Giả sử tôi đang thực hiện một phân tích dữ liệu lớn hơn trong sổ ghi chép Jupyter / Ipython với rất nhiều tính toán tốn thời gian được thực hiện. Sau đó, vì một số lý do, tôi phải tắt máy chủ cục bộ jupyter, nhưng tôi muốn quay lại thực hiện phân tích sau, mà không phải thực hiện lại tất cả các tính toán tốn thời gian.


Những gì tôi sẽ thích tình yêu để làm được picklehoặc lưu trữ toàn bộ phiên Jupyter (tất cả gấu trúc dataframes, np.arrays, các biến, ...) vì vậy tôi có thể yên tâm tắt máy chủ biết tôi có thể quay trở lại phiên của tôi trong một cách chính xác tình trạng tương tự như trước.

Nó thậm chí có thể về mặt kỹ thuật? Có chức năng tích hợp nào mà tôi đã bỏ qua không?


CHỈNH SỬA: dựa trên câu trả lời này, có một %store phép thuật nên là "dưa muối nhẹ". Tuy nhiên, bạn phải lưu trữ các biến theo cách thủ công như vậy:

#inside a ipython/nb session
foo = "A dummy string"
%store foo
đóng seeion, khởi động lại kernel
%store -r foo # r để làm mới
print(foo) # "A dummy string"

điều này khá gần với những gì tôi muốn, nhưng phải thực hiện thủ công và không thể phân biệt giữa các phiên khác nhau khiến nó kém hữu ích hơn.


1
Bất kỳ tiến bộ về điều này? Tôi chỉ nhận thấy có một không gian làm việc trong IDE Spyder có thể lưu các biến thành * .mat. Nhưng không chắc liệu điều này có thể được chuyển vào Jupyter Notebook hay không.
cqcn1991

Bạn đã xem xét pypi.python.org/pypi/dill chưa? "thì là cũng cung cấp khả năng: - tiết kiệm và phiên dịch viên tải python" Đó python tuy nhiên, không chắc chắn những gì người khác đang tham gia với ipython hoặc một hạt nhân
piccolbo

Câu trả lời:


64

Tôi nghĩ Dill trả lời câu hỏi của bạn tốt.

pip install dill

Lưu phiên Notebook:

import dill
dill.dump_session('notebook_env.db')

Khôi phục phiên Notebook:

import dill
dill.load_session('notebook_env.db')

Nguồn


1
không thành công khi có máy phát điện (loại có ý nghĩa khi tôi nghĩ về nó), nhưng có vẻ như điều này gần như chúng ta có thể hy vọng!
Robin Nemeth,

1
Làm việc rất tốt cho tôi. Một số điều cần lưu ý: Đầu tiên, nếu bạn có các đối tượng kết nối pyodbc xung quanh, bạn sẽ cần phải đóng chúng và sau đó đặt tất cả chúng thành Không có nếu không, bạn sẽ gặp lỗi "TypeError: không thể kén pyodbc.Connection đối tượng" . Thứ hai, trạng thái sổ ghi chép không bao gồm các đồ thị được tạo bởi mã của bạn, vì vậy bạn sẽ cần chạy lại các ô để đưa chúng trở lại.
Michael Szczepaniak

Nhưng nó không hoạt động Tôi đã sử dụng tệp đã lưu trên một máy khác
Jaya A

Thì là đã cài đặt. Tôi có nhập dill dill.dump_session ('notebook_env.db') từ dòng lệnh không?
cheznead

Không, bạn sẽ cần làm điều đó trong khi chạy sổ ghi chép Jupyter. Cả dump_session và load_session đều phải thông qua sổ ghi chép. Load_session của bạn có thể ở đầu sổ ghi chép. Và dump_session có thể nằm ở cuối sổ ghi chép.
MetalloyD

27

(Tôi muốn bình luận hơn là đưa ra câu trả lời thực tế, nhưng tôi cần nhiều danh tiếng hơn để bình luận.)

Bạn có thể lưu trữ hầu hết các biến dạng dữ liệu một cách có hệ thống. Những gì tôi thường làm là lưu trữ tất cả các khung dữ liệu, mảng, v.v. trong pandas.HDFStore . Ở đầu sổ ghi chép, khai báo

backup = pd.HDFStore('backup.h5')

và sau đó lưu trữ bất kỳ biến mới nào khi bạn tạo chúng

backup['var1'] = var1

Cuối cùng, có lẽ là một ý tưởng hay để làm

backup.close()

trước khi tắt máy chủ. Lần tiếp theo bạn muốn tiếp tục với sổ ghi chép:

backup = pd.HDFStore('backup.h5')
var1 = backup['var1']

Sự thật mà nói, tôi cũng thích chức năng tích hợp sẵn trong máy tính xách tay ipython. Bạn không thể lưu mọi thứ theo cách này (ví dụ: các đối tượng, kết nối) và thật khó để giữ cho sổ tay được sắp xếp với quá nhiều mã soạn sẵn.


5
Đây là một cách giải quyết rất thú vị, nhưng tôi thực sự có thể cảm nhận được nỗi đau liên quan đến việc duy trì hệ thống như vậy. Thanks for the tip tho :)
Robin Nemeth

19

Câu hỏi này liên quan đến: Làm thế nào để lưu vào bộ nhớ cache trong IPython Notebook?

Để lưu kết quả của các ô riêng lẻ, phép thuật lưu vào bộ nhớ đệm có ích.

%%cache longcalc.pkl var1 var2 var3
var1 = longcalculation()
....

Khi chạy lại sổ ghi chép, nội dung của ô này được tải từ bộ nhớ đệm.

Đây không phải là câu trả lời chính xác cho câu hỏi của bạn, nhưng nó có thể đủ để khi kết quả của tất cả các phép tính dài dòng được phục hồi nhanh chóng. Điều này kết hợp với việc nhấn nút chạy tất cả trên đầu máy tính xách tay là một giải pháp khả thi đối với tôi.

Sự kỳ diệu cache không thể lưu trạng thái của một máy tính xách tay toàn chưa . Theo hiểu biết của tôi, không có hệ thống nào khác để tiếp tục một "sổ ghi chép". Điều này sẽ yêu cầu lưu tất cả lịch sử của hạt nhân python. Sau khi tải sổ ghi chép và kết nối với hạt nhân, thông tin này sẽ được tải.

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.