Projeleriniz için GPU · KYC'siz kripto ödeme Nasıl kiralanır
Türkçe
Konsolu aç
Uygulamalı rehber / KERNODECK

Notebook'unuz çalışıyor. Hücreleri olmadan yeniden çalıştırabilir misiniz?

Bir notebook'tan betiğe geçmek için boş bir çekirdekten başlayın, girdileri belirleyin ve hesaplamayı fonksiyonlara taşıyın. Ardından programa açık argümanlar ve ayrı bir çıktı hedefi verin. Başarı, yeni bir süreçte beklenen bir sonuçla doğrulanır; hücreleri Python dosyası olarak dışa aktarmak deneyimi yeniden üretilebilir kılmaya yetmez.

6 dk okuma · Geliştiriciler için rehber

1. Çekirdeğin hâlâ bildiklerini bulun

Notebook dosyası ile çekirdek durumu her zaman aynı hikâyeyi anlatmaz. Bir değişken silinmiş bir hücreden gelmiş olabilir, bir liste birkaç kez değiştirilmiş olabilir ve son kod değişikliğinden önce yüklenen bir nesne bellekte kalmış olabilir. Dolayısıyla görüntülenen sonuçlar, mevcut hücrelerin bu sonuçları hâlâ görünür sıralarıyla ürettiğini kanıtlamaz.

Bir çalışma kopyası saklayın, çekirdeği yeniden başlatın ve ardından hücreleri baştan sona çalıştırın. Başarısız olan veya sonucu değişen ilk hücreyi not edin. Eski bir oturumdan bir değişkeni elle yeniden enjekte etmek yerine eksik bağımlılığı araştırın. Jupyter çekirdeği ayrı bir süreçtir; bir sekmeyi kapatmak, temiz bir ortamı yeniden oluşturmakla aynı şey değildir.

Dış etkileri de envanterleyin: indirme, paket kurulumu, dizin değişikliği, önceden üretilmiş bir dosyanın okunması ve bir ortam değişkeninin kullanımı. Sonucu anında alınmış gibi görünen bir hücre, yalnızca eski bir dosyayı yeniden kullanıyor olabilir. Gelecekteki betiğiniz, bilinçli bir girdiyi bir deneme kalıntısından ayırt edebilmelidir.

2. Kodu taşımadan önce sözleşmeyi yazın

Çıkarılacak tek bir görev seçin. Örneğin: bir skor dosyasını okuyun, skoru bir eşiğe ulaşan kimlikleri tutun ve sonucu yazın. Bu kılavuzdaki örnek eğitim amaçlıdır, çalıştırılmamıştır ve GPU içermez. Bir çalıştırmanın bağımlılıklarını göstermeye yarar; Kernodeck ile birlikte sunulan bir ölçümü veya aracı duyurmak için değildir.

Girdiyi, parametreyi ve çıktıyı, dönüşümü doğrulayacak kadar kesin tanımlayın. Burada eşik kapsayıcıdır: 0,5'e eşit bir skor tutulur. Kimlikler skorlarıyla ilişkili kalmalı ve giriş sırası korunmalıdır. Mevcut bir çıktı, yeni bir deneme tarafından istemeden değiştirilmemelidir.

Bu adım belirsiz bir geçişi önler: notebook eşiğe eşit skorları elerken betik onları tutuyorsa, hesaplamayı değiştirmişsinizdir. Bunun bir düzeltme mi yoksa bir gerileme mi olduğuna açıkça karar verin. Yalnızca birbirinden uzak iki değer değil, tam sınırda yer alan bir durumu da saklayın.

Tüm sütunları görmek için tabloyu kaydırın.
Çalıştırma iddiası olmayan, eğitim amaçlı seçim sözleşmesi.
ÖğeÖrnek değeriÖlçüt
Girdia: 0,4 ; b: 0,8 ; c: 0,5Birbirinden farklı üç kimlik, skorları 0 ile 1 arasında zaten doğrulanmış.
ParametreEşik 0,5Büyük veya eşit karşılaştırması.
Beklenen çıktıb, ardından cİki kimlik, yineleme veya yeniden sıralama olmadan.

3. Artık bir hücreye bağımlı olmayan bir fonksiyon çıkarın

Dönüşümü okuma ve yazma işlemlerinden ayırın. Bir hesaplama fonksiyonu verilerini ve eşiğini alır, ardından seçilen kimlikleri döndürür. seuil adlı bir global değişkene bakmaz, örtük olarak bir dosya açmaz ve giriş listesini değiştirmez. Bu, notebook ile betiğin tam olarak aynı hesaplamayı çağırmasını sağlar.

Kesitte, verilerin önceki sözleşmeye göre zaten doğrulanmış olduğu varsayılır. Dolayısıyla fonksiyon eksiksiz bir dosya doğrulayıcısı değildir. Bu sınır bilinçlidir: biçimleri programın girişinde doğrulayın, ardından dönüşümü anlaşılması kolay tutun. Bir parametre eklemek, bir değeri değiştirmiş olan hücreyi yeniden bulmayı gerektirmemelidir.

Notebook keşif aracınız olarak kalabilir. İkinci bir kopyayı sürdürmek yerine bu fonksiyonu içe aktarmasını sağlayın. Modülü değiştirdikten sonra iki yolu karşılaştırmak için yeni bir çekirdekle başlayın; zaten içe aktarılmış eski bir fonksiyon doğrulamayı bozmamalıdır.

Eğitim amaçlı fonksiyon — kendi modülünüze yerleştirilecek, burada çalıştırılmamıştır
def retenir_identifiants(records, seuil):
    return [
        record["id"]
        for record in records
        if record["score"] >= seuil
    ]


if __name__ == "__main__":
    records = [
        {"id": "a", "score": 0.4},
        {"id": "b", "score": 0.8},
        {"id": "c", "score": 0.5},
    ]
    attendu = ["b", "c"]
    obtenu = retenir_identifiants(records, 0.5)
    if obtenu != attendu:
        raise SystemExit("Sélection inattendue")

4. Parametreleri görünür bir girdi hâline getirin

Betiğin giriş noktası argümanları işler, seçimleri doğrular ve fonksiyonları çağırır. Standart argparse modülü seçenekleri tanımlar ve bir yardım metni üretir; iş kurallarınızı bilmez. Sözdizimsel olarak kabul edilen bir ondalık sayı yine de izin verilen aralığın dışında olabilir. Bu örnekteki eşik bu nedenle ek bir kontrol gerektirir.

Yolların çözümlemesini netleştirin: komutun başlatıldığı dizine göre mi, yoksa açıkça seçilmiş bir proje klasörüne göre mi göreli olduğunu belirtin. Hesaplamanın ortasında gizli bir dizin değişikliği kullanmayın. Aşağıdaki blok yalnızca argümanların ayrıştırılmasını gösterir; veri okuma ve yazma işlemleri okuyucu programına bağlanmayı bekler.

Sırları bu argümanların dışında tutun. Paylaşılabilir parametreler deneyi tanımlar; bir depoya veya depolamaya erişim başka bir kanaldan yürür. Bir iş arkadaşınıza yararlı olacak bir komut, bir jetonu da kopyalamadan kopyalanabilmelidir.

Öğretici argüman ayrıştırma — çalıştırılmayan alıntı
import argparse
from pathlib import Path


def lire_arguments():
    parser = argparse.ArgumentParser()
    parser.add_argument("--input", required=True, type=Path)
    parser.add_argument("--output", required=True, type=Path)
    parser.add_argument("--seuil", required=True, type=float)
    args = parser.parse_args()
    if not 0 <= args.seuil <= 1:
        parser.error("Le seuil doit être compris entre 0 et 1.")
    return args

5. Betiğe bir son ve doğrulanabilir çıktılar kazandırma

Orkestrasyonu bir main fonksiyonuna yerleştirin ve if __name__ == "__main__" koşulu altında tetikleyin. Böylece modül, işlemeyi hemen başlatmadan notebook tarafından içe aktarılabilir. İçe aktarmalar araçları tanımlar; ana giriş noktası ne zaman okunacağına, hesaplanacağına ve yazılacağına karar verir.

Her çalıştırmaya ayrı bir klasör atayın. Gerçekten kullanılan hassas olmayan parametreleri ve girdinin kimliğini kaydedin, ardından sonuçları yazın. Seçimimiz için tanımlayıcı sayısını, bunların girdiye ait olup olmadığını ve eşik kuralını doğrulayın. İyi biçimlendirilmiş bir JSON dosyası yanlış tanımlayıcılar içerebilir; tek başına varlığı yeterli değildir.

Girdi dosyası eksikse veya hedef kullanılamıyorsa açık bir hata öngörün. Bu sorunları boş bir listeyle değiştirmekten kaçının: böyle bir liste geçerli bir seçim olarak yorumlanabilir. Program, eşiği karşılayan sonuç olmaması ile okuma başarısız olduğu için sonuç olmaması durumunu birbirinden ayırt etmelidir.

6. İki yeni çalıştırmada karşılaştırma

Önce üç öğretici satırı kullanın. 0,5 eşiğiyle b ve c'yi; 0,9 ile boş bir liste; 0,4 ile üç tanımlayıcıyı bekleyin. Bu yanıtlar sözleşmeden çıkarılır ve burada çalıştırılmış sonuçlar olarak sunulmaz. Bunlar ters çevrilmiş bir karşılaştırma operatörünü veya yanlış bir sırayı tespit etmeye yarar.

Ardından yeniden başlatılmış notebook'unuzu ve betiğinizi aynı girdi üzerinde yeni bir süreçte çalıştırın. Ekran görüntülerini veya dosyalara yazılan saatleri değil, işe yarayan değerleri karşılaştırın. Temsili ikinci bir veri kümesi ve geçersiz bir girdi ekleyin. Çıktıların daha sade sunumu gibi beklenen farklılıkları belgeleyin.

Bir nbconvert dönüşümü hücrelerin ilk taşınmasını hızlandırabilir, ancak sihirli komutları hâlâ Jupyter'a bağımlı olabilir. Notebook'a özgü talimatları, gereksiz çıktıları ve doğaçlama kurulumları kaldırın veya değiştirin. Dışa aktarma bir başlangıç noktasıdır; temiz bir durumdan yapılan karşılaştırma, geçişin tamamlanıp tamamlanmadığına karar verir.

7. Gizli durumu yeniden getirmeden GPU'ya geçme

CPU akışı anlaşıldıktan sonra model yüklemesini ve arka ucu aynı açık yapıya bağlayın. Sürümleri, hassasiyeti, girdiyi ve hedefi koruyun. GPU'ya geçiş ne tutarsız bir hücre sırasını ne de eski bir denemeden kalan bir dosyayı düzeltir. PyTorch'un seçilen aygıtta gerçekten hesaplayabildiğini ayrıca doğrulayın.

İki başlatma farklı değerler üretiyorsa, unutulmuş bir durumu, rastgele bir kaynağı ve hesaplamanın sayısal sınırlarını birbirinden ayırt edin. Bir tohum, sürümler ve donanımlar arasında evrensel bir kimlik vaadi değildir. Kesintiye uğrayan eğitim için checkpoint'e özel prosedürü kullanın: bu kılavuz giriş noktasını dönüştürür, optimize edici veya üretici durumlarını yeniden oluşturmaz.

Kullanılabilir çıktı, önkoşulları ve bir sonuç kontrolüyle birlikte tek bir komutla tanımlayabileceğiniz bir programdır. Notebook keşfetmek ve izlemek için serbest kalır; artık hesaplamanın nasıl başlatılacağının belleğini tek başına taşımaz.

Sorularınız

Bir projeyi yeniden üretilebilir kılmak için notebook'lardan vazgeçmek gerekir mi?

Hayır. Notebook'u keşfetmek ve sunmak için tutun, ancak yeniden kullanılan hesaplamayı betik tarafından da çağrılan fonksiyonlara veya modüllere yerleştirin. Doğrulama temiz bir çekirdekten ve açık girdilerden başlamalıdır.

Bir notebook'u .py olarak dışa aktarmak yeterli midir?

Hayır. Dışa aktarma görünür kodu taşır; bağımlılıkların sırasını veya zaten çalıştırılmış hücrelerin etkilerini düzeltmez. Sihirli komutlar hâlâ Jupyter gerektirebilir. Betiği yeni bir süreçte doğrulayın.

Bayt bayt aynı dosyalar elde etmeli miyim?

Yalnızca bu ölçüt biçiminiz için anlamlıysa. Önce beklenen tanımlayıcıları, değerleri ve iş kurallarını karşılaştırın. Tarihler veya meta veriler hesaplamayı değiştirmeden farklılık gösterebilir; sayısal toleranslar açık olmalıdır.