Langkau ke kandungan

Teroka data dalam kernel berterusan

Panduan ini menunjukkan cara membolehkan ejen memuatkan sesuatu yang mahal sekali sahaja dan kemudian mengajukan beberapa soalan tentangnya, dan bukannya membayar kos muatan itu pada setiap soalan.

Alat eval menjalankan penterjemah berterusan. Pemboleh ubah, import dan data yang dimuatkan terus kekal antara panggilan.

python -c sekali laksana membayar kos persediaan pada setiap soalan. Memuatkan dataframe mengambil masa beberapa saat dan seratus megabait; melukis cartanya mengambil masa beberapa milisaat. Apabila setiap soalan membebankan kos muatan, ejen mengajukan lebih sedikit soalan daripada yang sepatutnya — dan setiap jawapan kembali sebagai teks yang kemudiannya perlu dihuraikan semula.

Muatkan data/runs.csv dan beritahu saya tempoh p95 mengikut ejen.

import pandas as pd
runs = pd.read_csv("data/runs.csv")
len(runs)

Ungkapan terakhir digaungkan seperti cara notebook melakukannya, jadi len(runs) melaporkan bilangan baris tanpa print.

Kemudian, dalam panggilan berasingan:

runs.groupby("agent")["duration_ms"].quantile(0.95).sort_values()

runs masih dimuatkan. Bingkai pandas dikembalikan sebagai jadual dan bukan sebagai repr.

import matplotlib.pyplot as plt
runs.groupby("agent")["duration_ms"].mean().plot.bar()

Rajah ditangkap selepas sel itu dan dikembalikan sebagai imej, yang dipaparkan oleh transkrip. Anda nampak carta itu; ejen pun sama.

Rajah ditutup selepas ditangkap. Rajah yang tidak dikumpulkan akan dilukis semula dan dihantar semula oleh sel seterusnya juga, jadi sesi lima sel akan mengeluarkan carta pertama sebanyak lima kali.

Semua ini ditulis semula menjadi kod biasa dan bukan menghasilkan ralat:

Yang anda taip Apa yang berlaku
%pip install x Menjalankan pip, kemudian mengosongkan cache modul supaya import seterusnya melihatnya
%cd path os.chdir
!command Subproses yang ditangkap
%%bash Selebih sel itu sebagai skrip shell
%%timeit 1000 larian bermasa

Pengusiran cache %pip itulah yang penting: memasang ke dalam penterjemah yang hidup tidak memberi apa-apa kesan kepada modul yang telah pun diimport, jadi tanpa ia, versi yang anda baru pasang bukanlah versi yang sedang berjalan.

paths = tool("find", {"pattern": "**/*.dart", "path": "lib"})
for path in paths.splitlines()[:100]:
contents = tool("read", {"path": path})
...

tool(name, args) masuk semula ke dalam daftar alat ejen itu sendiri. Ini bermakna satu sel boleh menyebar ke lebih seratus fail, atau mewakilkan melalui task, tanpa model menghabiskan satu pusingan bagi setiap item.

Panggilan berjambatan menggantung timeout sel selagi ia belum selesai. Belanjawan itu mengukur ketakaktifan, bukan masa berlalu sebenar — sel yang menyebar ke subejen dan menunggu selama empat minit tidak tergantung, dan membunuhnya di pertengahan penyebaran akan menghilangkan seluruh keadaan kernel.

eval(code: "…", reset: true, description: "Start a clean interpreter")

Membuang penterjemah itu dan memulakan yang baharu yang bersih. Semua yang dimuatkan hilang, dan itulah maksudnya.

Dalam persekitaran terasing perbualan apabila perbualan itu memilikinya, dan pada hos jika sebaliknya.

Penterjemah berterusan yang dipandu oleh model yang membaca repositori yang tidak dipercayai ialah tepat-tepat tujuan pelaksanaan dalam persekitaran terasing sahaja wujud: panggilan bash sekali laksana sekurang-kurangnya tamat, manakala kernel ialah shell yang mengingati.

Ia tidak memulakan persekitaran terasing untuk sampai ke sana — peraturan yang sama yang menghalang tab stesen daripada bermula secara automatik. Jika anda mahu kernel itu berada dalam persekitaran terasing, buka shell perbualan itu dahulu. Lihat Berikan ejen mesin untuk diuji.

  • Satu sel pada satu masa bagi setiap kernel. Dua sel yang berlumba dalam satu penterjemah ialah dua separuh daripada dua program yang berselang-seli dalam satu namespace.
  • Output dihadkan. Sel yang berada dalam gelung cetak dipotong dan bukan dibiarkan memenuhi tetingkap konteks.
  • Empat imej bagi setiap sel. Gelung plot boleh mengeluarkan satu rajah bagi setiap lelaran, dan setiap imej ialah kos tetap yang besar dalam permintaan yang membawanya.
  • Kernel mati bersama larian. Kernel yang masih memegang dataframe selepas perbualan tamat ialah kebocoran.