Gunakan Python dengan revoscalepy untuk membuat model yang berjalan dari jarak jauh pada SQL Server

Berlaku untuk: SQL Server 2017 (14.x) dan yang lebih baru

Pustaka Python revoscalepy dari Microsoft menyediakan algoritma ilmu data untuk eksplorasi, visualisasi, transformasi, dan analisis data. Pustaka ini memiliki kepentingan strategis dalam skenario integrasi Python di SQL Server. Pada server multi-inti, fungsi revoscalepy dapat berjalan secara paralel. Dalam arsitektur terdistribusi dengan server pusat dan stasiun kerja klien (komputer fisik terpisah, semuanya memiliki pustaka revoscalepy yang sama), Anda dapat menulis kode Python yang dimulai secara lokal, tetapi kemudian mengalihkan eksekusi ke instans SQL Server jarak jauh tempat data berada.

Anda dapat menemukan pencabutan skala dalam produk dan distribusi Microsoft berikut:

Latihan ini menunjukkan cara membuat model regresi linier berdasarkan rx_lin_mod, salah satu algoritma dalam pencabutan skala yang menerima konteks komputasi sebagai input. Kode yang akan Anda jalankan dalam latihan ini mengalihkan eksekusi kode dari lingkungan komputasi lokal ke jarak jauh, diaktifkan oleh fungsi revoscalepy yang memungkinkan konteks komputasi jarak jauh.

Dengan menyelesaikan tutorial ini, Anda akan mempelajari cara:

  • Menggunakan revoscalepy untuk membuat model linier
  • Mengalihkan operasi dari konteks komputasi lokal ke jarak jauh

Prasyarat

Data sampel yang digunakan dalam latihan ini adalah database flightdata .

Anda memerlukan IDE untuk menjalankan kode sampel dalam artikel ini, dan IDE harus ditautkan ke Python yang dapat dieksekusi.

Untuk mempraktikkan pergeseran konteks komputasi, Anda memerlukan stasiun kerja lokal dan instans mesin database SQL Server dengan Layanan Pembelajaran Mesin dan Python diaktifkan.

Tip

Jika Anda tidak memiliki dua komputer, Anda dapat mensimulasikan konteks komputasi jarak jauh pada satu komputer fisik dengan menginstal aplikasi yang relevan. Pertama, penginstalan SQL Server Machine Learning Services beroperasi sebagai instans "jarak jauh". Kedua, penginstalan pustaka klien Python beroperasi sebagai klien. Anda akan memiliki dua salinan distribusi Python yang sama dan pustaka Microsoft Python pada komputer yang sama. Anda harus melacak jalur file dan salinan Python.exe mana yang Anda gunakan untuk menyelesaikan latihan dengan sukses.

Konteks komputasi jarak jauh dan revoscalepy

Sampel ini menunjukkan proses pembuatan model Python dalam konteks komputasi jarak jauh, yang memungkinkan Anda bekerja dari klien, tetapi memilih lingkungan jarak jauh, seperti SQL Server atau Spark, tempat operasi benar-benar dilakukan. Tujuan dari konteks komputasi jarak jauh adalah untuk membawa komputasi ke tempat data berada.

Untuk menjalankan kode Python di SQL Server memerlukan paket revoscalepy. Ini adalah paket Python khusus yang disediakan oleh Microsoft, mirip dengan paket RevoScaleR untuk bahasa R. Paket revoscalepy mendukung pembuatan konteks komputasi, dan menyediakan infrastruktur untuk meneruskan data dan model antara stasiun kerja lokal dan server jarak jauh. Fungsi revoscalepy yang mendukung eksekusi kode dalam database adalah RxInSqlServer.

Dalam pelajaran ini, Anda menggunakan data dalam SQL Server untuk melatih model linier berdasarkan rx_lin_mod, fungsi dalam revoscalepy yang mendukung regresi atas himpunan data yang sangat besar.

Pelajaran ini juga menunjukkan dasar-dasar cara menyiapkan lalu menggunakan konteks komputasi SQL Server di Python.

Jalankan kode sampel

Setelah Anda menyiapkan database dan memiliki data untuk pelatihan yang disimpan dalam tabel, buka lingkungan pengembangan Python dan jalankan sampel kode.

Kode melakukan langkah-langkah berikut:

  1. Mengimpor pustaka dan fungsi yang diperlukan.
  2. Membuat koneksi ke SQL Server. Membuat objek sumber data untuk bekerja dengan data.
  3. Memodifikasi data menggunakan transformasi sehingga dapat digunakan oleh algoritma regresi logistik.
  4. Memanggil dan menentukan rumus yang digunakan agar pas rx_lin_mod dengan model.
  5. Menghasilkan serangkaian prediksi berdasarkan data asli.
  6. Membuat ringkasan berdasarkan nilai yang diprediksi.

Semua operasi dilakukan menggunakan instans SQL Server sebagai konteks komputasi.

Catatan

Untuk demonstrasi sampel ini yang berjalan dari baris perintah, lihat video ini: SQL Server 2017 Advanced Analytics dengan Python

Kode sampel

from revoscalepy import RxComputeContext, RxInSqlServer, RxSqlServerData
from revoscalepy import rx_lin_mod, rx_predict, rx_summary
from revoscalepy import RxOptions, rx_import

import os

def test_linmod_sql():
    sql_server = os.getenv('PYTEST_SQL_SERVER', '.')
    
    sql_connection_string = 'Driver=SQL Server;Server=' + sqlServer + ';Database=sqlpy;Trusted_Connection=True;'
    print("connectionString={0!s}".format(sql_connection_string))

    data_source = RxSqlServerData(
        sql_query = "select top 10 * from airlinedemosmall",
        connection_string = sql_connection_string,

        column_info = {
            "ArrDelay" : { "type" : "integer" },
            "DayOfWeek" : {
                "type" : "factor",
                "levels" : [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]
            }
        })

    sql_compute_context = RxInSqlServer(
        connection_string = sql_connection_string,
        num_tasks = 4,
        auto_cleanup = False
        )

    #
    # Run linmod locally
    #
    linmod_local = rx_lin_mod("ArrDelay ~ DayOfWeek", data = data_source)
    #
    # Run linmod remotely
    #
    linmod = rx_lin_mod("ArrDelay ~ DayOfWeek", data = data_source, compute_context = sql_compute_context)

    # Predict results
    # 
    predict = rx_predict(linmod, data = rx_import(input_data = data_source))
    summary = rx_summary("ArrDelay ~ DayOfWeek", data = data_source, compute_context = sql_compute_context)

Menentukan sumber data vs. menentukan konteks komputasi

Sumber data berbeda dari konteks komputasi. Sumber data menentukan data yang digunakan dalam kode Anda. Konteks komputasi menentukan di mana kode akan dijalankan. Namun, mereka menggunakan beberapa informasi yang sama:

  • Variabel Python, seperti sql_query dan sql_connection_string, tentukan sumber data.

    Teruskan variabel ini ke konstruktor RxSqlServerData untuk mengimplementasikan objek sumber data bernama data_source.

  • Anda membuat objek konteks komputasi dengan menggunakan konstruktor RxInSqlServer . Objek konteks komputasi yang dihasilkan diberi nama sql_cc.

    Contoh ini menggunakan kembali string koneksi yang sama dengan yang Anda gunakan di sumber data, dengan asumsi bahwa data berada pada instans SQL Server yang sama dengan yang akan Anda gunakan sebagai konteks komputasi.

    Namun, sumber data dan konteks komputasi dapat berada di server yang berbeda.

Mengubah konteks komputasi

Setelah menentukan konteks komputasi, Anda harus mengatur konteks komputasi aktif.

Secara default, sebagian besar operasi dijalankan secara lokal, yang berarti bahwa jika Anda tidak menentukan konteks komputasi yang berbeda, data akan diambil dari sumber data, dan kode akan berjalan di lingkungan Python Anda saat ini.

Ada dua cara untuk mengatur konteks komputasi aktif:

  • Sebagai argumen metode atau fungsi
  • Dengan memanggil rx_set_computecontext

Mengatur konteks komputasi sebagai argumen metode atau fungsi

Dalam contoh ini, Anda mengatur konteks komputasi dengan menggunakan argumen dari fungsi rx individual.

linmod = rx_lin_mod_ex("ArrDelay ~ DayOfWeek", data = data, compute_context = sql_compute_context)

Konteks komputasi ini digunakan kembali dalam panggilan ke rxsummary:

summary = rx_summary("ArrDelay ~ DayOfWeek", data = data_source, compute_context = sql_compute_context)

Mengatur konteks komputasi secara eksplisit menggunakan rx_set_compute_context

Fungsi rx_set_compute_context memungkinkan Anda beralih di antara konteks komputasi yang telah ditentukan.

Setelah Anda mengatur konteks komputasi aktif, konteks tersebut tetap aktif hingga Anda mengubahnya.

Menggunakan pemrosesan dan streaming paralel

Saat menentukan konteks komputasi, Anda juga dapat mengatur parameter yang mengontrol bagaimana data ditangani oleh konteks komputasi. Parameter ini berbeda tergantung pada jenis sumber data.

Untuk konteks komputasi SQL Server, Anda dapat mengatur ukuran batch, atau memberikan petunjuk tentang tingkat paralelisme untuk digunakan dalam menjalankan tugas.

  • Sampel dijalankan di komputer dengan empat prosesor, sehingga num_tasks parameter diatur ke 4 untuk memungkinkan penggunaan sumber daya maksimum.
  • Jika Anda mengatur nilai ini ke 0, SQL Server menggunakan default, yaitu menjalankan tugas sebanyak mungkin secara paralel, di bawah pengaturan MAXDOP saat ini untuk server. Namun, jumlah pasti tugas yang mungkin dialokasikan tergantung pada banyak faktor lain, seperti pengaturan server, dan pekerjaan lain yang sedang berjalan.

Langkah berikutnya

Sampel dan tutorial Python tambahan ini menunjukkan skenario end-to-end menggunakan sumber data yang lebih kompleks, serta penggunaan konteks komputasi jarak jauh.