نکته سریع: 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 تشکر می کنم.