mirror of
https://github.com/zama-ai/tfhe-rs.git
synced 2026-01-09 06:38:06 -05:00
chore(js): add benchmark for unsafe coop context
This commit is contained in:
committed by
Nicolas Sarlin
parent
e20aea90df
commit
509aadcad2
6
.github/workflows/benchmark_wasm_client.yml
vendored
6
.github/workflows/benchmark_wasm_client.yml
vendored
@@ -153,6 +153,12 @@ jobs:
|
||||
env:
|
||||
BROWSER: ${{ matrix.browser }}
|
||||
|
||||
- name: Run benchmarks (unsafe coop)
|
||||
run: |
|
||||
make bench_web_js_api_unsafe_coop_"${BROWSER}"_ci
|
||||
env:
|
||||
BROWSER: ${{ matrix.browser }}
|
||||
|
||||
- name: Parse results
|
||||
run: |
|
||||
make parse_wasm_benchmarks
|
||||
|
||||
38
Makefile
38
Makefile
@@ -1300,13 +1300,14 @@ run_web_js_api_parallel: build_web_js_api_parallel setup_venv
|
||||
--browser-path $(browser_path) \
|
||||
--driver-path $(driver_path) \
|
||||
--browser-kind $(browser_kind) \
|
||||
--server-cmd "npm run server" \
|
||||
--server-cmd $(server_cmd) \
|
||||
--server-workdir "$(WEB_SERVER_DIR)" \
|
||||
--id-pattern $(filter)
|
||||
|
||||
test_web_js_api_parallel_chrome: browser_path = "$(WEB_RUNNER_DIR)/chrome/chrome-linux64/chrome"
|
||||
test_web_js_api_parallel_chrome: driver_path = "$(WEB_RUNNER_DIR)/chrome/chromedriver-linux64/chromedriver"
|
||||
test_web_js_api_parallel_chrome: browser_kind = chrome
|
||||
test_web_js_api_parallel_chrome: server_cmd = "npm run server:multithreaded"
|
||||
test_web_js_api_parallel_chrome: filter = Test
|
||||
|
||||
.PHONY: test_web_js_api_parallel_chrome # Run tests for the web wasm api on Chrome
|
||||
@@ -1322,6 +1323,7 @@ test_web_js_api_parallel_chrome_ci: setup_venv
|
||||
test_web_js_api_parallel_firefox: browser_path = "$(WEB_RUNNER_DIR)/firefox/firefox/firefox"
|
||||
test_web_js_api_parallel_firefox: driver_path = "$(WEB_RUNNER_DIR)/firefox/geckodriver"
|
||||
test_web_js_api_parallel_firefox: browser_kind = firefox
|
||||
test_web_js_api_parallel_firefox: server_cmd = "npm run server:multithreaded"
|
||||
test_web_js_api_parallel_firefox: filter = Test
|
||||
|
||||
.PHONY: test_web_js_api_parallel_firefox # Run tests for the web wasm api on Firefox
|
||||
@@ -1571,6 +1573,7 @@ bench_pbs128_gpu: install_rs_check_toolchain
|
||||
bench_web_js_api_parallel_chrome: browser_path = "$(WEB_RUNNER_DIR)/chrome/chrome-linux64/chrome"
|
||||
bench_web_js_api_parallel_chrome: driver_path = "$(WEB_RUNNER_DIR)/chrome/chromedriver-linux64/chromedriver"
|
||||
bench_web_js_api_parallel_chrome: browser_kind = chrome
|
||||
bench_web_js_api_parallel_chrome: server_cmd = "npm run server:multithreaded"
|
||||
bench_web_js_api_parallel_chrome: filter = Bench
|
||||
|
||||
.PHONY: bench_web_js_api_parallel_chrome # Run benchmarks for the web wasm api
|
||||
@@ -1586,6 +1589,7 @@ bench_web_js_api_parallel_chrome_ci: setup_venv
|
||||
bench_web_js_api_parallel_firefox: browser_path = "$(WEB_RUNNER_DIR)/firefox/firefox/firefox"
|
||||
bench_web_js_api_parallel_firefox: driver_path = "$(WEB_RUNNER_DIR)/firefox/geckodriver"
|
||||
bench_web_js_api_parallel_firefox: browser_kind = firefox
|
||||
bench_web_js_api_parallel_firefox: server_cmd = "npm run server:multithreaded"
|
||||
bench_web_js_api_parallel_firefox: filter = Bench
|
||||
|
||||
.PHONY: bench_web_js_api_parallel_firefox # Run benchmarks for the web wasm api
|
||||
@@ -1598,6 +1602,38 @@ bench_web_js_api_parallel_firefox_ci: setup_venv
|
||||
nvm use $(NODE_VERSION) && \
|
||||
$(MAKE) bench_web_js_api_parallel_firefox
|
||||
|
||||
bench_web_js_api_unsafe_coop_chrome: browser_path = "$(WEB_RUNNER_DIR)/chrome/chrome-linux64/chrome"
|
||||
bench_web_js_api_unsafe_coop_chrome: driver_path = "$(WEB_RUNNER_DIR)/chrome/chromedriver-linux64/chromedriver"
|
||||
bench_web_js_api_unsafe_coop_chrome: browser_kind = chrome
|
||||
bench_web_js_api_unsafe_coop_chrome: server_cmd = "npm run server:unsafe-coop"
|
||||
bench_web_js_api_unsafe_coop_chrome: filter = ZeroKnowledgeBench # Only bench zk with unsafe coop
|
||||
|
||||
.PHONY: bench_web_js_api_unsafe_coop_chrome # Run benchmarks for the web wasm api without cross-origin isolation
|
||||
bench_web_js_api_unsafe_coop_chrome: run_web_js_api_parallel
|
||||
|
||||
.PHONY: bench_web_js_api_unsafe_coop_chrome_ci # Run benchmarks for the web wasm api without cross-origin isolation
|
||||
bench_web_js_api_unsafe_coop_chrome_ci: setup_venv
|
||||
source ~/.nvm/nvm.sh && \
|
||||
nvm install $(NODE_VERSION) && \
|
||||
nvm use $(NODE_VERSION) && \
|
||||
$(MAKE) bench_web_js_api_unsafe_coop_chrome
|
||||
|
||||
bench_web_js_api_unsafe_coop_firefox: browser_path = "$(WEB_RUNNER_DIR)/firefox/firefox/firefox"
|
||||
bench_web_js_api_unsafe_coop_firefox: driver_path = "$(WEB_RUNNER_DIR)/firefox/geckodriver"
|
||||
bench_web_js_api_unsafe_coop_firefox: browser_kind = firefox
|
||||
bench_web_js_api_unsafe_coop_firefox: server_cmd = "npm run server:unsafe-coop"
|
||||
bench_web_js_api_unsafe_coop_firefox: filter = ZeroKnowledgeBench # Only bench zk with unsafe coop
|
||||
|
||||
.PHONY: bench_web_js_api_unsafe_coop_firefox # Run benchmarks for the web wasm api without cross-origin isolation
|
||||
bench_web_js_api_unsafe_coop_firefox: run_web_js_api_parallel
|
||||
|
||||
.PHONY: bench_web_js_api_unsafe_coop_firefox_ci # Run benchmarks for the web wasm api without cross-origin isolation
|
||||
bench_web_js_api_unsafe_coop_firefox_ci: setup_venv
|
||||
source ~/.nvm/nvm.sh && \
|
||||
nvm install $(NODE_VERSION) && \
|
||||
nvm use $(NODE_VERSION) && \
|
||||
$(MAKE) bench_web_js_api_unsafe_coop_firefox
|
||||
|
||||
.PHONY: bench_hlapi # Run benchmarks for integer operations
|
||||
bench_hlapi: install_rs_check_toolchain
|
||||
RUSTFLAGS="$(RUSTFLAGS)" __TFHE_RS_BENCH_BIT_SIZES_SET=$(BIT_SIZES_SET) \
|
||||
|
||||
@@ -367,6 +367,8 @@ def dump_benchmark_results(results, browser_kind):
|
||||
"""
|
||||
Dump as JSON benchmark results into a file.
|
||||
If `results` is an empty dict then this function is a no-op.
|
||||
If the file already exists, new results are merged with existing ones,
|
||||
overwriting keys that already exist.
|
||||
|
||||
:param results: benchmark results as :class:`dict`
|
||||
:param browser_kind: browser as :class:`BrowserKind`
|
||||
@@ -376,7 +378,15 @@ def dump_benchmark_results(results, browser_kind):
|
||||
key.replace("mean", "_".join((browser_kind.name, "mean"))): val
|
||||
for key, val in results.items()
|
||||
}
|
||||
pathlib.Path("tfhe-benchmark/wasm_benchmark_results.json").write_text(json.dumps(results))
|
||||
results_path = pathlib.Path("tfhe-benchmark/wasm_benchmark_results.json")
|
||||
existing_results = {}
|
||||
if results_path.exists():
|
||||
try:
|
||||
existing_results = json.loads(results_path.read_text())
|
||||
except json.JSONDecodeError:
|
||||
pass
|
||||
existing_results.update(results)
|
||||
results_path.write_text(json.dumps(existing_results))
|
||||
|
||||
|
||||
def start_web_server(
|
||||
|
||||
@@ -12,14 +12,22 @@ function setButtonsDisabledState(buttonIds, state) {
|
||||
|
||||
async function setup() {
|
||||
let supportsThreads = await threads();
|
||||
if (!supportsThreads) {
|
||||
console.error("This browser does not support threads");
|
||||
return;
|
||||
// This variable is set to true if we are using the `serve.multithreaded.json` config
|
||||
if (crossOriginIsolated) {
|
||||
if (supportsThreads) {
|
||||
console.info("Running in multithreaded mode");
|
||||
} else {
|
||||
console.error("This browser does not support threads");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.warn("Running in unsafe coop mode");
|
||||
}
|
||||
|
||||
const worker = new Worker(new URL("worker.js", import.meta.url), {
|
||||
type: "module",
|
||||
});
|
||||
|
||||
const demos = await Comlink.wrap(worker).demos;
|
||||
|
||||
const demoNames = [
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"build": "cp -r ../../tfhe/pkg ./ && webpack build ./index.js --mode production -o dist --output-filename index.js && cp index.html dist/ && cp favicon.ico dist/",
|
||||
"server": "serve --config ../serve.json dist/",
|
||||
"server": "npm run server:multithreaded",
|
||||
"server:multithreaded": "serve --config ../serve.multithreaded.json dist/",
|
||||
"server:unsafe-coop": "serve --config ../serve.unsafe-coop.json dist/",
|
||||
"format": "prettier . --write",
|
||||
"check-format": "prettier . --check"
|
||||
},
|
||||
|
||||
11
tfhe/web_wasm_parallel_tests/serve.unsafe-coop.json
Normal file
11
tfhe/web_wasm_parallel_tests/serve.unsafe-coop.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"headers": [
|
||||
{
|
||||
"source": "**/*.@(js|html)",
|
||||
"headers": [
|
||||
{ "key": "Cross-Origin-Embedder-Policy", "value": "unsafe-none" },
|
||||
{ "key": "Cross-Origin-Opener-Policy", "value": "unsafe-none" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
import * as Comlink from "comlink";
|
||||
import { threads } from "wasm-feature-detect";
|
||||
import init, {
|
||||
initThreadPool,
|
||||
init_panic_hook,
|
||||
@@ -753,7 +754,10 @@ async function compactPublicKeyZeroKnowledgeBench() {
|
||||
|
||||
async function main() {
|
||||
await init();
|
||||
await initThreadPool(navigator.hardwareConcurrency);
|
||||
let supportsThreads = await threads();
|
||||
if (supportsThreads) {
|
||||
await initThreadPool(navigator.hardwareConcurrency);
|
||||
}
|
||||
await init_panic_hook();
|
||||
|
||||
return Comlink.proxy({
|
||||
|
||||
Reference in New Issue
Block a user