برنامه نویسی

نکته سریع: Numeromancy، WebAssembly و SingleStoreDB Cloud

خلاصه

Numeromancy یک مخزن SingleStore Labs GitHub است که در اصل برای استفاده با کد ویژوال استودیو و SingleStoreDB Dev Docker Image در دسترس است. در این مقاله کوتاه، خواهیم دید که با SingleStoreDB Cloud به همان اندازه کار می کند.

معرفی

در مقاله قبلی، دیدیم که راه های متعددی وجود دارد که می توانیم درایو SingleStoreDB را آزمایش کنیم. ثبت نام برای حساب آزمایشی رایگان یک راه عالی برای آزمایش SingleStoreDB Cloud است. در این مقاله کوتاه، یک پروژه SingleStore Labs موجود را می‌گیریم و سهولت استقرار و اجرای آن در SingleStoreDB Cloud را نشان می‌دهیم.

اعداد

اصطلاح numeromancy از لاتین numerō (numerus، “عدد”) + – -mancy از یونان باستان μαντεία (manteía، “پیشگویی”، “پیشگویی”، “فالگیری”) گرفته شده است.
— https://numeromancy.com/

مخزن SingleStore Labs GitHub برای بهینه سازی یک مشکل برای داده های ذخیره شده در SingleStoreDB طراحی شده است. در این پروژه، WebAssembly نیز برای گسترش SingleStoreDB با چندین عملیات برای این کار بهینه سازی استفاده می شود. یک نمونه مورد استفاده نیز برای بهبودی سرطان ارائه شده است.

یک حساب SingleStoreDB Cloud ایجاد کنید

مقاله قبلی مراحل لازم برای ایجاد یک حساب رایگان SingleStoreDB Cloud را نشان داد. استفاده خواهیم کرد گروه اعداد به عنوان نام گروه فضای کاری ما و numeromancy-demo به عنوان نام فضای کاری ما.

هنگامی که پایگاه داده خود را در مراحل زیر ایجاد کردیم، اطلاعات خود را یادداشت می کنیم کلمه عبور و میزبان نام.

یک پایگاه داده ایجاد کنید

در حساب SingleStoreDB Cloud خود، از آن استفاده خواهیم کرد ویرایشگر SQL برای ایجاد یک پایگاه داده جدید، به شرح زیر:

CREATE DATABASE IF NOT EXISTS numeromancy;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

محیط توسعه Wasm محلی را راه اندازی کنید

ما مراحل توضیح داده شده در مقاله قبلی را برای ایجاد سریع یک محیط توسعه محلی Wasm دنبال می کنیم. ما همچنین نصب و استفاده خواهیم کرد pushwasm ابزار

در مرحله بعد، بیایید مخزن GitHub زیر را شبیه سازی کنیم:

git clone https://github.com/singlestore-labs/numeromancy
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ویرایش کنید

قبل از اینکه بتوانیم کد را بسازیم باید دو ویرایش کوچک انجام دهیم.

اول، ما به تغییر numeromancy/driver دایرکتوری و یک ویرایش در آن انجام دهید Cargo.toml، جایگزین خط:

mysql = "22.2.0"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با موارد زیر:

mysql = "23.0.1"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دوم، ما به تغییر numeromancy/problem دایرکتوری و یک ویرایش در آن انجام دهید Cargo.toml، جایگزین خط:

wit-bindgen-rust = { git = "https://github.com/bytecodealliance/wit-bindgen.git" }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با موارد زیر:

wit-bindgen-rust = { git = "https://github.com/bytecodealliance/wit-bindgen.git", rev = "60e3c5b41e616fee239304d92128e117dd9be0a7" }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

گردآوری

در حالی که هنوز در numeromancy/problem دایرکتوری ما کد را به صورت زیر می سازیم:

cargo build --target wasm32-wasi --release
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مستقر کنید

هنگامی که کد ساخته شد، یک متغیر محیطی ایجاد می کنیم:

export SINGLESTOREDB_CONNSTRING="mysql://admin:<password>@<host>:3306/numeromancy"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما جایگزین می کنیم <password> و <host> با مقادیر حساب SingleStoreDB Cloud ما.

بعد، ما استفاده می کنیم pushwasm از numeromancy دایرکتوری برای بارگیری ماژول های Wasm در SingleStoreDB، یک به یک:

pushwasm --force $SINGLESTOREDB_CONNSTRING --wit ./problem/interface.wit ./target/wasm32-wasi/release/numeromancy_problem.wasm log_regression_infer

pushwasm --force $SINGLESTOREDB_CONNSTRING --wit ./problem/interface.wit ./target/wasm32-wasi/release/numeromancy_problem.wasm log_regression_cost

pushwasm --force $SINGLESTOREDB_CONNSTRING --wit ./problem/interface.wit ./target/wasm32-wasi/release/numeromancy_problem.wasm log_regression_gradient

pushwasm --force $SINGLESTOREDB_CONNSTRING --wit ./problem/interface.wit ./target/wasm32-wasi/release/numeromancy_problem.wasm log_regression_hessian

pushwasm --force $SINGLESTOREDB_CONNSTRING --wit ./problem/interface.wit ./target/wasm32-wasi/release/numeromancy_problem.wasm vec_pack_f64

pushwasm --force $SINGLESTOREDB_CONNSTRING --wit ./problem/interface.wit ./target/wasm32-wasi/release/numeromancy_problem.wasm vec_unpack_f64
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همه UDF های Wasm باید با موفقیت ایجاد شوند.

SQL را بارگیری و اجرا کنید

برای اجرای مثال، باید به را تغییر دهیم numeromancy/example/cancer_remission دایرکتوری و تغییر دهید config.toml، به شرح زیر است:

[database]
host = "<host>"
port = 3306
user = "admin"
password = "<password>"
database = "cancer_remission"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما جایگزین می کنیم <host> و <password> با مقادیر حساب SingleStoreDB Cloud ما.

در حالی که در همان دایرکتوری هستیم، دستورات را در قسمت اجرا می کنیم setup.sql فایل برای ایجاد cancer_remission پایگاه داده، جدول، توابع و بارگذاری داده ها از training.csv فایل:

mysql -u admin -h <host> -P 3306 --default-auth=mysql_native_password -p<password> --local-infile < setup.sql
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما جایگزین می کنیم <host> و <password> با مقادیر حساب SingleStoreDB Cloud ما.

Wasm را در پایگاه داده اجرا کنید

در مرحله بعد، ما یک موتور استنتاج را آموزش خواهیم داد:

cargo run --release -p numeromancy-driver
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توجه داشته باشید: همچنین ممکن است برای اطمینان از اجرای موفقیت آمیز دستور بالا، لازم باشد موارد زیر را که توسط OpenBLAS مورد نیاز است اجرا کنیم:

sudo apt install gfortran
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه باید مشابه موارد زیر باشد:

ArgminResult:
    param (best):  [58.0382598807061, 24.661290504279627, 19.29324847057158, -19.600904904829974, 3.895979130291112, 0.1510635568225436, -87.43343650294993], shape=[7], strides=[1], layout=CFcf (0xf), const ndim=1
    cost (best):   10.875326142858473
    iters (best):  43
    iters (total): 44
    termination: No change in cost function value
    time:        Some(3.396346349s)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از مخزن GitHub، چندین پرس و جو وجود دارد که می توانیم با استفاده از آنها اجرا کنیم ویرایشگر SQL در حساب SingleStoreDB Cloud ما. به عنوان مثال، بازگرداندن ماتریس سردرگمی:

USE cancer_remmission;

SELECT * FROM cancer_remission_confusion();
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه باید مشابه موارد زیر باشد:

+---------------+----------------+----------------+---------------+
| true_positive | false_negative | false_positive | true_negative |
+---------------+----------------+----------------+---------------+
|             5 |              4 |              3 |            15 |
+---------------+----------------+----------------+---------------+
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و روش استنتاج تولید شده:

SELECT cell, smear, infil, li, blast, temp,
    cancer_remission_infer([1, cell, smear, infil, li, blast, temp]) AS predicted_remission
FROM cancer_remission;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه باید مشابه موارد زیر باشد:

+------+-------+-------+------+-------+-------+--------------------------+
| cell | smear | infil | li   | blast | temp  | predicted_remission      |
+------+-------+-------+------+-------+-------+--------------------------+
|    1 |  0.87 |  0.87 |  0.7 | 1.053 | 0.986 |       0.2908573450870292 |
|  0.9 |  0.75 |  0.68 |  1.3 | 0.519 |  0.98 |       0.6970204491139145 |
| 0.95 |  0.97 |  0.92 |    1 |  1.23 | 0.992 |      0.37658295782152706 |
|  0.5 |  0.44 |  0.22 |  0.6 | 0.114 |  0.99 |    0.0000638724834693532 |
|    1 |  0.63 |  0.63 |  1.1 | 1.072 | 0.986 |       0.6778427646783881 |
|    1 |  0.58 |  0.58 |    1 | 0.531 | 1.002 |      0.24768453374925065 |
| 0.95 |  0.87 |  0.83 |  1.9 | 1.354 |  1.02 |       0.6005257295293988 |
|    1 |  0.45 |  0.45 |  0.8 | 0.322 | 0.999 |      0.16527765831402835 |
| 0.95 |  0.36 |  0.34 |  0.5 |     0 | 1.038 |    0.0008578955974432781 |
| 0.85 |  0.39 |  0.33 |  0.7 | 0.279 | 0.988 |     0.027693373668109336 |
|    1 |   0.9 |   0.9 |  1.1 | 1.037 |  0.99 |       0.5758566835834648 |
|    1 |  0.84 |  0.84 |  1.9 | 2.064 |  1.02 |       0.7257507508234508 |
|    1 |  0.75 |  0.75 |    1 | 1.322 | 1.004 |      0.22816935123559853 |
|    1 |  0.33 |  0.33 |  0.4 | 0.176 |  1.01 |     0.015910019504605355 |
| 0.95 |  0.32 |   0.3 |  1.6 | 0.886 | 0.988 |       0.8510965609291663 |
|    1 |  0.69 |  0.69 |  0.9 | 0.398 | 0.986 |       0.4611791818041166 |
|  0.9 |  0.36 |  0.32 |  1.4 |  0.74 | 0.992 |      0.43509086962553895 |
|  0.8 |  0.88 |   0.7 |  0.8 | 0.176 | 0.982 |      0.15557254876835122 |
|  0.7 |  0.76 |  0.53 |  1.2 | 0.146 | 0.982 |      0.16982726822480884 |
| 0.65 |  0.42 |  0.27 |  0.5 | 0.114 | 1.014 |  0.000054717346377588746 |
|  0.8 |  0.83 |  0.66 |  1.9 |   1.1 | 0.996 |        0.790661732185965 |
|    1 |  0.65 |  0.65 |  0.6 | 0.519 | 0.982 |      0.28007865692320666 |
|  0.8 |  0.46 |  0.37 |  0.4 |  0.38 | 1.006 |    0.0009554334533287413 |
|  0.2 |  0.39 |  0.08 |  0.8 | 0.114 |  0.99 | 0.0000005052130574394507 |
|  0.9 |  0.93 |  0.84 |  0.6 | 1.591 |  1.02 |     0.007444604052869717 |
|    1 |   0.6 |   0.6 |  1.7 | 0.964 |  0.99 |       0.9384652733591272 |
|    1 |  0.73 |  0.73 |  0.7 | 0.398 | 0.986 |      0.27946870781343947 |
+------+-------+-------+------+-------+-------+--------------------------+
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خلاصه

در این مقاله کوتاه، ما با موفقیت محیط خود را پیکربندی کرده و نمونه Cancer Remission را در SingleStoreDB Cloud اجرا کردیم.

سپاسگزاریها

من از Carl Sverre برای توسعه مثال و مستندات Numeromancy در مخزن GitHub تشکر می کنم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا