import%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0Awith%20app.setup%3A%0A%20%20%20%20import%20copy%0A%20%20%20%20import%20importlib%0A%20%20%20%20import%20importlib.metadata%0A%20%20%20%20import%20importlib.util%0A%20%20%20%20import%20os%0A%20%20%20%20import%20platform%0A%20%20%20%20import%20time%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20japanize_matplotlib%20%20%23%20noqa%3A%20F401%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20torch%0A%20%20%20%20import%20torch.nn%20as%20nn%0A%20%20%20%20import%20torch.nn.functional%20as%20F%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20MNIST%20%E8%AA%8D%E8%AD%98%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%20PyTorch%20%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6%E5%A4%89%E6%8F%9B%0A%0A%20%20%20%20%E5%B0%8F%E3%81%95%E3%81%AA%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%92%20PyTorch%20%E3%81%A7%E5%AD%A6%E7%BF%92%E3%81%97%E3%80%81**TorchScript%20%E2%86%92%20ONNX%20Runtime%20%E2%86%92%0A%20%20%20%20OpenVINO%20%E2%86%92%20ExecuTorch**%20%E3%81%AE%E9%A0%86%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%A6%E3%80%81%E6%AC%A1%E3%81%AE%202%20%E7%82%B9%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%201.%20**%E5%87%BA%E5%8A%9B%E3%81%AE%E4%B8%80%E8%87%B4**%EF%BC%9A%E3%81%A9%E3%81%AE%E5%A4%89%E6%8F%9B%E5%85%88%E3%81%A7%E3%82%82%E3%80%81%E5%AD%A6%E7%BF%92%E6%B8%88%E3%81%BF%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E5%90%8C%E3%81%98%20logits%E3%83%BB%E5%90%8C%E3%81%98%E4%BA%88%E6%B8%AC%E3%81%8C%E5%BE%97%E3%82%89%E3%82%8C%E3%82%8B%E3%81%8B%0A%20%20%20%202.%20**%E6%8E%A8%E8%AB%96%E6%99%82%E9%96%93%E3%81%AE%E9%81%95%E3%81%84**%EF%BC%9A%E5%90%8C%E3%81%98%E9%87%8D%E3%81%BF%E3%83%BB%E5%90%8C%E3%81%98%E5%85%A5%E5%8A%9B%E3%81%A7%E3%82%82%E3%80%81%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%0A%20%20%20%20%20%20%20%EF%BC%88CPU%20%E3%81%8B%20GPU%20%E3%81%8B%E3%80%81%E3%81%A9%E3%81%AE%E6%8E%A8%E8%AB%96%20runtime%20%E3%81%8B%E3%80%81%E3%81%A9%E3%81%AE%20backend%20%E3%81%8B%EF%BC%89%E3%81%A7%E9%80%9F%E5%BA%A6%E3%81%8C%E3%81%A9%E3%82%8C%E3%81%A0%E3%81%91%E5%A4%89%E3%82%8F%E3%82%8B%E3%81%8B%0A%0A%20%20%20%20GPU%20%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%8B%E3%81%AF%20runtime%20%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E9%81%95%E3%81%84%E3%81%BE%E3%81%99%E3%80%82ONNX%20Runtime%20%E3%81%AF%E5%90%8C%E3%81%98%20ONNX%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%20CPU%20%E3%81%A8%0A%20%20%20%20CUDA%20%E3%81%AE%20session%20%E3%82%92%E4%B8%A1%E6%96%B9%E4%BD%9C%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81**%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E5%9B%BA%E5%AE%9A%E3%81%97%E3%81%9F%E3%81%BE%E3%81%BE%E5%AE%9F%E8%A1%8C%E5%85%88%E3%81%A0%E3%81%91%E3%82%92%20CPU%20%E3%81%A8%20GPU%20%E3%81%A7%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%81%9F%0A%20%20%20%20%E6%AF%94%E8%BC%83**%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82OpenVINO%20%E3%81%AE%20GPU%20%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AF%20Intel%20%E8%A3%BD%20GPU%20%E5%B0%82%E7%94%A8%E3%80%81ExecuTorch%20%E3%81%AE%20XNNPACK%0A%20%20%20%20backend%20%E3%81%AF%20CPU%20%E5%B0%82%E7%94%A8%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E3%81%93%E3%81%AE%202%20%E3%81%A4%E3%81%AF%20CPU%20%E3%81%A7%E3%81%AE%E6%AF%94%E8%BC%83%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%BE%8C%E5%8D%8A%E3%81%A7%E3%81%AF%20batch%20size%20%E3%82%92%E5%A4%89%E3%81%88%E3%81%AA%E3%81%8C%E3%82%89%201%20%E5%9B%9E%E3%81%AE%E6%8E%A8%E8%AB%96%E3%81%AB%E3%81%8B%E3%81%8B%E3%82%8B%E6%99%82%E9%96%93%E3%82%92%E6%B8%AC%E3%82%8A%E3%80%81%E5%B7%AE%E3%81%8C%E7%94%9F%E3%81%98%E3%82%8B%E7%90%86%E7%94%B1%E3%82%92%E5%AE%9F%E6%B8%AC%E5%80%A4%E3%81%A8%0A%20%20%20%20%E5%AF%BE%E5%BF%9C%E4%BB%98%E3%81%91%E3%81%A6%E6%95%B4%E7%90%86%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%85%B1%E9%80%9A%E9%83%A8%E5%93%81%E3%81%A8%E5%86%8D%E7%8F%BE%E6%80%A7%0A%0A%20%20%20%20%E5%86%92%E9%A0%AD%E3%81%AE%20%60with%20app.setup%60%20%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%EF%BC%88marimo%20%E4%B8%8A%E3%81%A7%E3%81%AF%E6%8A%98%E3%82%8A%E3%81%9F%E3%81%9F%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%EF%BC%89%E3%81%A7%E3%80%81notebook%20%E5%85%A8%E4%BD%93%E3%81%8B%E3%82%89%0A%20%20%20%20%E4%BD%BF%E3%81%86%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%A8%20marimo%E3%83%BBMatplotlib%E3%83%BBNumPy%E3%83%BBpandas%E3%83%BBPyTorch%20%E3%82%92%20import%20%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E4%B9%B1%E6%95%B0%20seed%20%E3%82%92%2042%20%E3%81%AB%E5%9B%BA%E5%AE%9A%E3%81%97%E3%80%81CUDA%E3%83%BBMPS%E3%83%BBCPU%20%E3%81%AE%E9%A0%86%E3%81%AB%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%AA%20device%20%E3%82%92%E9%81%B8%E3%81%B3%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%A7%E9%81%B8%E3%82%93%E3%81%A0%20%60device%60%20%E3%81%AF**%E5%AD%A6%E7%BF%92%E3%81%AB%E3%81%AE%E3%81%BF**%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E5%A4%89%E6%8F%9B%E3%81%A8%E6%AF%94%E8%BC%83%E3%81%AF%E3%80%81%E3%81%A9%E3%81%AE%E7%92%B0%E5%A2%83%E3%81%A7%E3%82%82%E5%90%8C%E3%81%98%E6%89%8B%E9%A0%86%E3%81%AB%E3%81%AA%E3%82%8B%E3%82%88%E3%81%86%0A%20%20%20%20CPU%20%E4%B8%8A%E3%81%AE%E9%87%8D%E3%81%BF%E3%81%8B%E3%82%89%E8%A1%8C%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20seed%20%3D%2042%0A%20%20%20%20np.random.seed(seed)%0A%20%20%20%20torch.manual_seed(seed)%0A%20%20%20%20if%20torch.cuda.is_available()%3A%0A%20%20%20%20%20%20%20%20torch.cuda.manual_seed_all(seed)%0A%20%20%20%20%20%20%20%20device%20%3D%20torch.device(%22cuda%22)%0A%20%20%20%20elif%20getattr(torch.backends%2C%20%22mps%22%2C%20None)%20is%20not%20None%20and%20torch.backends.mps.is_available()%3A%0A%20%20%20%20%20%20%20%20device%20%3D%20torch.device(%22mps%22)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20device%20%3D%20torch.device(%22cpu%22)%0A%20%20%20%20print(f%22selected%20device%3A%20%7Bdevice%7D%22)%0A%20%20%20%20pd.DataFrame(%7B%22item%22%3A%20%5B%22torch%22%2C%20%22device%22%2C%20%22seed%22%5D%2C%20%22value%22%3A%20%5Btorch.__version__%2C%20str(device)%2C%20seed%5D%7D)%0A%20%20%20%20return%20(device%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%AE%E8%A8%98%E9%8C%B2%0A%0A%20%20%20%20%E6%8E%A8%E8%AB%96%E6%99%82%E9%96%93%E3%81%AF%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%A8%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E6%95%B0%E3%81%AB%E5%BC%B7%E3%81%8F%E4%BE%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E6%AF%94%E8%BC%83%E3%81%AE%E5%89%8D%E6%8F%90%E3%81%A8%E3%81%97%E3%81%A6%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%82%92%E8%A1%A8%E3%81%AB%0A%20%20%20%20%E6%AE%8B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AB%E8%BC%89%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E6%95%B0%E5%80%A4%E3%81%AF%E3%80%81%E4%B8%8B%E3%81%AE%E8%A1%A8%E3%81%AE%E7%92%B0%E5%A2%83%E3%81%A7%E6%B8%AC%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%E3%81%AA%E3%81%97%EF%BC%88%E5%AE%9F%E8%A1%8C%E4%B8%AD%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%8B%E3%82%89%E5%8F%96%E5%BE%97%EF%BC%89%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60available%60%20%3D%20%E5%A4%89%E6%8F%9B%E5%85%88%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E6%9C%89%E7%84%A1%E3%80%81%60environment_frame%60%20%3D%20%E7%92%B0%E5%A2%83%E6%83%85%E5%A0%B1%E3%81%AE%20%60DataFrame%60%0A%20%20%20%20-%20%60torch.get_num_threads()%60%20%E3%81%AF%20PyTorch%20%E3%81%8C%20CPU%20%E6%BC%94%E7%AE%97%E3%81%AB%E4%BD%BF%E3%81%86%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E6%95%B0%E3%81%A7%E3%81%99%E3%80%82ONNX%20Runtime%E3%83%BB%0A%20%20%20%20%20%20OpenVINO%E3%83%BBExecuTorch%20%E3%81%AF%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E7%8B%AC%E8%87%AA%E3%81%AE%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%83%97%E3%83%BC%E3%83%AB%E3%82%92%E6%8C%81%E3%81%A1%E3%80%81%E6%97%A2%E5%AE%9A%E5%80%A4%E3%82%82%E7%95%B0%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20def%20package_version(name)%3A%0A%20%20%20%20%20%20%20%20if%20importlib.util.find_spec(name)%20is%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%22not%20installed%22%0A%20%20%20%20%20%20%20%20for%20_distribution%20in%20importlib.metadata.packages_distributions().get(name%2C%20%5Bname%5D)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20f%22%7B_distribution%7D%20%7Bimportlib.metadata.version(_distribution)%7D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20except%20importlib.metadata.PackageNotFoundError%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%20%20%20%20%20%20%20%20return%20%22unknown%22%0A%0A%20%20%20%20available%20%3D%20%7B%0A%20%20%20%20%20%20%20%20name%3A%20importlib.util.find_spec(name)%20is%20not%20None%0A%20%20%20%20%20%20%20%20for%20name%20in%20(%22onnx%22%2C%20%22onnxruntime%22%2C%20%22openvino%22%2C%20%22executorch%22)%0A%20%20%20%20%7D%0A%20%20%20%20return%20available%2C%20package_version%0A%0A%0A%40app.cell%0Adef%20_(device%2C%20package_version)%3A%0A%20%20%20%20def%20cpu_name()%3A%0A%20%20%20%20%20%20%20%20if%20importlib.util.find_spec(%22openvino%22)%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_openvino%20%3D%20importlib.import_module(%22openvino%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20str(_openvino.Core().get_property(%22CPU%22%2C%20%22FULL_DEVICE_NAME%22)).strip()%0A%20%20%20%20%20%20%20%20%20%20%20%20except%20Exception%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pass%0A%20%20%20%20%20%20%20%20return%20platform.processor()%20or%20platform.machine()%0A%0A%20%20%20%20def%20runtime_devices()%3A%0A%20%20%20%20%20%20%20%20rows%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20if%20importlib.util.find_spec(%22onnxruntime%22)%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_onnxruntime%20%3D%20importlib.import_module(%22onnxruntime%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20rows.append((%22ONNX%20Runtime%20%E3%81%AE%20provider%22%2C%20%22%2C%20%22.join(_onnxruntime.get_available_providers())))%0A%20%20%20%20%20%20%20%20if%20importlib.util.find_spec(%22openvino%22)%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_openvino%20%3D%20importlib.import_module(%22openvino%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20rows.append((%22OpenVINO%20%E3%81%AE%20device%22%2C%20%22%2C%20%22.join(_openvino.Core().available_devices)))%0A%20%20%20%20%20%20%20%20return%20rows%0A%0A%20%20%20%20environment_frame%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22OS%22%2C%20platform.platform())%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22CPU%22%2C%20cpu_name())%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22%E8%AB%96%E7%90%86%E3%82%B3%E3%82%A2%E6%95%B0%22%2C%20str(os.cpu_count()))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22torch%20%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E6%95%B0%22%2C%20str(torch.get_num_threads()))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22%E5%AD%A6%E7%BF%92%20device%22%2C%20str(device))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22GPU%22%2C%20torch.cuda.get_device_name(0)%20if%20torch.cuda.is_available()%20else%20%22%E3%81%AA%E3%81%97%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22torch%22%2C%20torch.__version__)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22onnxruntime%22%2C%20package_version(%22onnxruntime%22))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22openvino%22%2C%20package_version(%22openvino%22))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22executorch%22%2C%20package_version(%22executorch%22))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20*runtime_devices()%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20columns%3D%5B%22item%22%2C%20%22value%22%5D%2C%0A%20%20%20%20)%0A%20%20%20%20environment_frame%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%87%E3%83%BC%E3%82%BF%0A%0A%20%20%20%20torchvision%20%E3%81%AE%20MNIST%20%E3%82%92%20%60data%2F%60%20%E3%81%B8%20download%20%E3%81%97%E3%80%81%60ToTensor%60%20%E3%81%A7%20%60%5B0%2C%201%5D%60%20%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%9F%E3%81%82%E3%81%A8%E3%80%81%0A%20%20%20%20%E5%B9%B3%E5%9D%87%200.1307%E3%83%BB%E6%A8%99%E6%BA%96%E5%81%8F%E5%B7%AE%200.3081%20%E3%81%A7%E6%AD%A3%E8%A6%8F%E5%8C%96%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%20notebook%20%E3%81%AE%E7%9B%AE%E7%9A%84%E3%81%AF%E7%B2%BE%E5%BA%A6%E3%81%AE%E8%BF%BD%E6%B1%82%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%0A%20%20%20%20%E5%A4%89%E6%8F%9B%E7%B5%8C%E8%B7%AF%E3%81%AE%E6%AF%94%E8%BC%83%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E5%AD%A6%E7%BF%92%E3%81%AF%E5%85%88%E9%A0%AD%206%2C000%20%E4%BB%B6%E3%80%81%E8%A9%95%E4%BE%A1%E3%81%AF%E5%85%88%E9%A0%AD%201%2C000%20%E4%BB%B6%E3%81%A0%E3%81%91%E3%82%92%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%89%8D%E5%87%A6%E7%90%86%EF%BC%9A%60Normalize((0.1307%2C)%2C%20(0.3081%2C))%60%EF%BC%88MNIST%20%E5%85%A8%E7%94%BB%E7%B4%A0%E3%81%AE%E5%B9%B3%E5%9D%87%E3%81%A8%E6%A8%99%E6%BA%96%E5%81%8F%E5%B7%AE%EF%BC%89%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60train_loader%60%EF%BC%88batch%20size%20128%E3%83%BBshuffle%20%E3%81%82%E3%82%8A%EF%BC%89%E3%80%81%60test_loader%60%EF%BC%88batch%20size%20256%E3%83%BB%E9%A0%86%E5%BA%8F%E5%9B%BA%E5%AE%9A%EF%BC%89%0A%20%20%20%20-%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E3%80%81%E6%AD%A3%E8%A6%8F%E5%8C%96%E3%82%92%E6%88%BB%E3%81%97%E3%81%A6%E5%AD%A6%E7%BF%92%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%85%88%E9%A0%AD%2010%20%E6%9E%9A%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20torch.utils.data%20import%20DataLoader%2C%20Subset%0A%20%20%20%20from%20torchvision%20import%20datasets%2C%20transforms%0A%0A%20%20%20%20mean%2C%20scale%20%3D%200.1307%2C%200.3081%0A%20%20%20%20transform%20%3D%20transforms.Compose(%5Btransforms.ToTensor()%2C%20transforms.Normalize((mean%2C)%2C%20(scale%2C))%5D)%0A%20%20%20%20train_dataset%20%3D%20datasets.MNIST(%22.%2Fdata%22%2C%20train%3DTrue%2C%20download%3DTrue%2C%20transform%3Dtransform)%0A%20%20%20%20test_dataset%20%3D%20datasets.MNIST(%22.%2Fdata%22%2C%20train%3DFalse%2C%20download%3DTrue%2C%20transform%3Dtransform)%0A%20%20%20%20train_subset%20%3D%20Subset(train_dataset%2C%20list(range(6_000)))%0A%20%20%20%20test_subset%20%3D%20Subset(test_dataset%2C%20list(range(1_000)))%0A%20%20%20%20train_loader%20%3D%20DataLoader(train_subset%2C%20batch_size%3D128%2C%20shuffle%3DTrue%2C%20num_workers%3D0)%0A%20%20%20%20test_loader%20%3D%20DataLoader(test_subset%2C%20batch_size%3D256%2C%20shuffle%3DFalse%2C%20num_workers%3D0)%0A%20%20%20%20return%20mean%2C%20scale%2C%20test_loader%2C%20train_loader%2C%20train_subset%0A%0A%0A%40app.cell%0Adef%20_(mean%2C%20scale%2C%20train_subset)%3A%0A%20%20%20%20_fig%2C%20_axes%20%3D%20plt.subplots(2%2C%205%2C%20figsize%3D(8%2C%204))%0A%20%20%20%20for%20_idx%2C%20_axis%20in%20enumerate(_axes.ravel())%3A%0A%20%20%20%20%20%20%20%20_image%2C%20_label%20%3D%20train_subset%5B_idx%5D%0A%20%20%20%20%20%20%20%20_axis.imshow(_image.squeeze(0)%20*%20scale%20%2B%20mean%2C%20cmap%3D%22gray%22)%0A%20%20%20%20%20%20%20%20_axis.set_title(f%22label%3D%7B_label%7D%22)%0A%20%20%20%20%20%20%20%20_axis.axis(%22off%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%A2%E3%83%87%E3%83%AB%0A%0A%20%20%20%20%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%202%20%E5%B1%A4%E3%81%A8%E5%85%A8%E7%B5%90%E5%90%88%202%20%E5%B1%A4%E3%81%AE%E5%B0%8F%E3%81%95%E3%81%AA%20CNN%20%E3%81%A7%E3%81%99%E3%80%8228%C3%9728%20%E3%81%AE%E5%85%A5%E5%8A%9B%E3%81%AF%20%60conv1%60%20%E3%81%A7%2026%C3%9726%E3%80%81%60conv2%60%20%E3%81%A7%0A%20%20%20%2024%C3%9724%20%E3%81%AB%E3%81%AA%E3%82%8A%E3%80%81%60max_pool2d%60%20%E3%81%A7%2012%C3%9712%20%E3%81%B8%E7%B8%AE%E5%B0%8F%E3%81%95%E3%82%8C%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E5%85%A8%E7%B5%90%E5%90%88%E5%B1%A4%E3%81%AE%E5%85%A5%E5%8A%9B%E3%81%AF%0A%20%20%20%2064%20%C3%97%2012%20%C3%97%2012%20%3D%209%2C216%20%E6%AC%A1%E5%85%83%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E5%87%BA%E5%8A%9B%E3%81%AF%2010%20%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E5%AF%BE%E6%95%B0%E7%A2%BA%E7%8E%87%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%60F.max_pool2d(x%2C%202%2C%202)%60%20%E3%81%A8%20**stride%20%E3%82%92%E6%98%8E%E7%A4%BA**%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E7%82%B9%E3%81%A0%E3%81%91%E3%80%81%E7%B4%A0%E6%9C%B4%E3%81%AA%E5%AE%9F%E8%A3%85%E3%81%A8%E7%95%B0%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82stride%20%E3%82%92%0A%20%20%20%20%E7%9C%81%E7%95%A5%E3%81%97%E3%81%A6%E3%82%82%E6%97%A2%E5%AE%9A%E3%81%A7%20kernel%20size%20%E3%81%A8%E5%90%8C%E3%81%98%202%20%E3%81%AB%E3%81%AA%E3%82%8A%E8%A8%88%E7%AE%97%E7%B5%90%E6%9E%9C%E3%81%AF%E5%A4%89%E3%82%8F%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8C%E3%80%81%E5%BE%8C%E5%8D%8A%E3%81%A7%E4%BD%BF%E3%81%86%20ExecuTorch%20%E3%81%AE%0A%20%20%20%20XNNPACK%20backend%20%E3%81%AF%20stride%20%E5%BC%95%E6%95%B0%E3%81%8C%E7%9C%81%E7%95%A5%E3%81%95%E3%82%8C%E3%81%9F%20%60max_pool2d%60%20%E3%82%92%E8%A7%A3%E9%87%88%E3%81%A7%E3%81%8D%E3%81%9A%E3%80%81%E5%A4%89%E6%8F%9B%E3%81%8C%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.class_definition%0Aclass%20Net(nn.Module)%3A%0A%20%20%20%20def%20__init__(self)%3A%0A%20%20%20%20%20%20%20%20super().__init__()%0A%20%20%20%20%20%20%20%20self.conv1%20%3D%20nn.Conv2d(1%2C%2032%2C%203%2C%201)%0A%20%20%20%20%20%20%20%20self.conv2%20%3D%20nn.Conv2d(32%2C%2064%2C%203%2C%201)%0A%20%20%20%20%20%20%20%20self.dropout1%20%3D%20nn.Dropout(0.25)%0A%20%20%20%20%20%20%20%20self.dropout2%20%3D%20nn.Dropout(0.5)%0A%20%20%20%20%20%20%20%20self.fc1%20%3D%20nn.Linear(9216%2C%20128)%0A%20%20%20%20%20%20%20%20self.fc2%20%3D%20nn.Linear(128%2C%2010)%0A%0A%20%20%20%20def%20forward(self%2C%20x)%3A%0A%20%20%20%20%20%20%20%20x%20%3D%20F.relu(self.conv1(x))%0A%20%20%20%20%20%20%20%20x%20%3D%20F.relu(self.conv2(x))%0A%20%20%20%20%20%20%20%20x%20%3D%20F.max_pool2d(x%2C%202%2C%202)%0A%20%20%20%20%20%20%20%20x%20%3D%20self.dropout1(x)%0A%20%20%20%20%20%20%20%20x%20%3D%20torch.flatten(x%2C%201)%0A%20%20%20%20%20%20%20%20x%20%3D%20F.relu(self.fc1(x))%0A%20%20%20%20%20%20%20%20x%20%3D%20self.dropout2(x)%0A%20%20%20%20%20%20%20%20return%20F.log_softmax(self.fc2(x)%2C%20dim%3D1)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%AD%A6%E7%BF%92%E3%81%AE%E6%BA%96%E5%82%99%0A%0A%20%20%20%20%E6%9C%80%E9%81%A9%E5%8C%96%E3%81%AB%E3%81%AF%20Adadelta%EF%BC%88%E5%AD%A6%E7%BF%92%E7%8E%87%201.0%EF%BC%89%E3%82%92%E4%BD%BF%E3%81%84%E3%80%81%60StepLR%60%20%E3%81%A7%201%20epoch%20%E3%81%94%E3%81%A8%E3%81%AB%E5%AD%A6%E7%BF%92%E7%8E%87%E3%82%92%200.7%20%E5%80%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E6%90%8D%E5%A4%B1%E3%81%AF%20%60log_softmax%60%20%E5%87%BA%E5%8A%9B%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%20negative%20log%20likelihood%20%E3%81%A7%E3%81%99%E3%80%82%E7%B6%9A%E3%81%8F%202%20%E3%82%BB%E3%83%AB%E3%81%A7%E3%80%81%E6%9C%80%E9%81%A9%E5%8C%96%E5%99%A8%E3%81%A8%0A%20%20%20%20%E8%A9%95%E4%BE%A1%E9%96%A2%E6%95%B0%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%60evaluate()%60%20%E3%81%AF%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%20device%20%E4%B8%8A%E3%81%A7%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E8%A9%95%E4%BE%A1%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%60model%60%EF%BC%88%E8%A9%95%E4%BE%A1%E3%81%99%E3%82%8B%E3%83%A2%E3%83%87%E3%83%AB%EF%BC%89%E3%80%81%60device%60%E3%80%81%60loader%60%EF%BC%88%60DataLoader%60%EF%BC%89%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9A%60eval()%60%20%E3%81%A8%20%60no_grad()%60%20%E3%81%AE%E4%B8%8B%E3%81%A7%E5%85%A8%20batch%20%E3%82%92%E6%8E%A8%E8%AB%96%E3%81%97%E3%80%81%E6%90%8D%E5%A4%B1%E3%81%AE%E5%90%88%E8%A8%88%E3%81%A8%E6%AD%A3%E8%A7%A3%E6%95%B0%E3%82%92%E9%9B%86%E8%A8%88%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60(%E5%B9%B3%E5%9D%87%E6%90%8D%E5%A4%B1%2C%20%E6%AD%A3%E8%A7%A3%E7%8E%87)%60%20%E3%81%AE%E3%82%BF%E3%83%97%E3%83%AB%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(device)%3A%0A%20%20%20%20model%20%3D%20Net().to(device)%0A%20%20%20%20optimizer%20%3D%20torch.optim.Adadelta(model.parameters()%2C%20lr%3D1.0)%0A%20%20%20%20scheduler%20%3D%20torch.optim.lr_scheduler.StepLR(optimizer%2C%20step_size%3D1%2C%20gamma%3D0.7)%0A%20%20%20%20return%20model%2C%20optimizer%2C%20scheduler%0A%0A%0A%40app.function%0Adef%20evaluate(model%2C%20device%2C%20loader)%3A%0A%20%20%20%20model.eval()%0A%20%20%20%20total_loss%20%3D%200.0%0A%20%20%20%20correct%20%3D%200%0A%20%20%20%20with%20torch.no_grad()%3A%0A%20%20%20%20%20%20%20%20for%20_batch%2C%20_target%20in%20loader%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_batch%20%3D%20_batch.to(device)%0A%20%20%20%20%20%20%20%20%20%20%20%20_target%20%3D%20_target.to(device)%0A%20%20%20%20%20%20%20%20%20%20%20%20logits%20%3D%20model(_batch)%0A%20%20%20%20%20%20%20%20%20%20%20%20total_loss%20%2B%3D%20F.nll_loss(logits%2C%20_target%2C%20reduction%3D%22sum%22).item()%0A%20%20%20%20%20%20%20%20%20%20%20%20correct%20%2B%3D%20logits.argmax(dim%3D1).eq(_target).sum().item()%0A%20%20%20%20return%20total_loss%20%2F%20len(loader.dataset)%2C%20correct%20%2F%20len(loader.dataset)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%AD%A6%E7%BF%92%0A%0A%20%20%20%202%20epoch%20%E3%81%A0%E3%81%91%E5%AD%A6%E7%BF%92%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%90%84%20epoch%20%E3%81%AE%E7%B5%82%E3%82%8F%E3%82%8A%E3%81%AB%E8%A9%95%E4%BE%A1%E7%94%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A7%E6%90%8D%E5%A4%B1%E3%81%A8%E6%AD%A3%E8%A7%A3%E7%8E%87%E3%82%92%E6%B8%AC%E3%82%8A%E3%80%81%0A%20%20%20%20%60history_frame%60%20%E3%81%B8%E8%A8%98%E9%8C%B2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E7%B6%9A%E3%81%8F%202%20%E3%82%BB%E3%83%AB%E3%81%A7%E3%80%81%E3%81%9D%E3%81%AE%E8%A8%98%E9%8C%B2%E3%82%92%E8%A1%A8%E3%81%A8%E5%9B%B3%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(device%2C%20model%2C%20optimizer%2C%20scheduler%2C%20test_loader%2C%20train_loader)%3A%0A%20%20%20%20history_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20epoch%20in%20range(1%2C%203)%3A%0A%20%20%20%20%20%20%20%20model.train()%0A%20%20%20%20%20%20%20%20running_loss%20%3D%200.0%0A%20%20%20%20%20%20%20%20for%20_batch%2C%20_target%20in%20train_loader%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_batch%20%3D%20_batch.to(device)%0A%20%20%20%20%20%20%20%20%20%20%20%20_target%20%3D%20_target.to(device)%0A%20%20%20%20%20%20%20%20%20%20%20%20optimizer.zero_grad()%0A%20%20%20%20%20%20%20%20%20%20%20%20logits%20%3D%20model(_batch)%0A%20%20%20%20%20%20%20%20%20%20%20%20loss%20%3D%20F.nll_loss(logits%2C%20_target)%0A%20%20%20%20%20%20%20%20%20%20%20%20loss.backward()%0A%20%20%20%20%20%20%20%20%20%20%20%20optimizer.step()%0A%20%20%20%20%20%20%20%20%20%20%20%20running_loss%20%2B%3D%20loss.item()%20*%20_batch.size(0)%0A%20%20%20%20%20%20%20%20test_loss%2C%20test_accuracy%20%3D%20evaluate(model%2C%20device%2C%20test_loader)%0A%20%20%20%20%20%20%20%20history_rows.append(%7B%22epoch%22%3A%20epoch%2C%20%22train_loss%22%3A%20running_loss%20%2F%20len(train_loader.dataset)%2C%20%22test_loss%22%3A%20test_loss%2C%20%22test_accuracy%22%3A%20test_accuracy%7D)%0A%20%20%20%20%20%20%20%20scheduler.step()%0A%20%20%20%20history_frame%20%3D%20pd.DataFrame(history_rows)%0A%20%20%20%20return%20(history_frame%2C)%0A%0A%0A%40app.cell%0Adef%20_(history_frame)%3A%0A%20%20%20%20history_frame%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(history_frame)%3A%0A%20%20%20%20_fig%2C%20_axes%20%3D%20plt.subplots(1%2C%202%2C%20figsize%3D(10%2C%204))%0A%20%20%20%20_axes%5B0%5D.plot(history_frame%5B%22epoch%22%5D%2C%20history_frame%5B%22train_loss%22%5D%2C%20label%3D%22train%22)%0A%20%20%20%20_axes%5B0%5D.plot(history_frame%5B%22epoch%22%5D%2C%20history_frame%5B%22test_loss%22%5D%2C%20label%3D%22test%22)%0A%20%20%20%20_axes%5B0%5D.legend()%0A%20%20%20%20_axes%5B0%5D.set_title(%22NLL%20loss%22)%0A%20%20%20%20_axes%5B1%5D.plot(history_frame%5B%22epoch%22%5D%2C%20history_frame%5B%22test_accuracy%22%5D%2C%20marker%3D%22o%22)%0A%20%20%20%20_axes%5B1%5D.set_ylim(0.0%2C%201.0)%0A%20%20%20%20_axes%5B1%5D.set_title(%22Test%20accuracy%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%A4%89%E6%8F%9B%E5%89%8D%E3%81%AE%E5%9F%BA%E6%BA%96%E3%81%A8%E3%81%AA%E3%82%8B%E6%8E%A8%E8%AB%96%0A%0A%20%20%20%20%E8%A9%95%E4%BE%A1%E7%94%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%85%88%E9%A0%AD%208%20%E6%9E%9A%E3%82%92%E3%80%81%E4%BB%A5%E9%99%8D%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E6%AF%94%E8%BC%83%E3%81%A7%E5%85%B1%E9%80%9A%E3%81%AE%E5%85%A5%E5%8A%9B%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E3%81%BE%E3%81%9A%E5%AD%A6%E7%BF%92%E3%81%AB%E4%BD%BF%E3%81%A3%E3%81%9F%0A%20%20%20%20device%20%E4%B8%8A%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A7%E6%8E%A8%E8%AB%96%E3%81%97%E3%80%81%E3%81%9D%E3%81%AE%E4%BA%88%E6%B8%AC%E3%82%92%E5%9B%B3%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60sample_input%60%EF%BC%888%C3%971%C3%9728%C3%9728%20%E3%81%AE%20tensor%E3%83%BB%E5%AD%A6%E7%BF%92%20device%20%E4%B8%8A%EF%BC%89%E3%80%81%60sample_labels%60%EF%BC%88%E6%AD%A3%E8%A7%A3%E3%83%A9%E3%83%99%E3%83%AB%EF%BC%89%E3%80%81%0A%20%20%20%20%20%20%60native_logits%60%EF%BC%88CPU%20%E3%81%B8%E6%88%BB%E3%81%97%E3%81%9F%20logits%EF%BC%89%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(device%2C%20model%2C%20test_loader)%3A%0A%20%20%20%20sample_batch%2C%20sample_labels%20%3D%20next(iter(test_loader))%0A%20%20%20%20sample_input%20%3D%20sample_batch%5B%3A8%5D.to(device)%0A%20%20%20%20sample_labels%20%3D%20sample_labels%5B%3A8%5D%0A%20%20%20%20model.eval()%0A%20%20%20%20with%20torch.no_grad()%3A%0A%20%20%20%20%20%20%20%20native_logits%20%3D%20model(sample_input).cpu()%0A%20%20%20%20return%20native_logits%2C%20sample_input%2C%20sample_labels%0A%0A%0A%40app.cell%0Adef%20_(mean%2C%20native_logits%2C%20sample_input%2C%20sample_labels%2C%20scale)%3A%0A%20%20%20%20native_predictions%20%3D%20native_logits.argmax(dim%3D1).numpy()%0A%20%20%20%20_fig%2C%20_axes%20%3D%20plt.subplots(2%2C%204%2C%20figsize%3D(8%2C%204))%0A%20%20%20%20for%20_axis%2C%20_image%2C%20_pred%2C%20_label%20in%20zip(_axes.ravel()%2C%20sample_input.cpu()%2C%20native_predictions%2C%20sample_labels%2C%20strict%3DFalse)%3A%0A%20%20%20%20%20%20%20%20_axis.imshow(_image.squeeze(0)%20*%20scale%20%2B%20mean%2C%20cmap%3D%22gray%22)%0A%20%20%20%20%20%20%20%20_axis.set_title(f%22pred%3D%7B_pred%7D%2C%20true%3D%7B_label.item()%7D%22)%0A%20%20%20%20%20%20%20%20_axis.axis(%22off%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%A4%89%E6%8F%9B%E3%81%AE%E5%85%B1%E9%80%9A%E6%BA%96%E5%82%99%0A%0A%20%20%20%20%E5%A4%89%E6%8F%9B%E3%81%AF%20CPU%20%E4%B8%8A%E3%81%AE%E9%87%8D%E3%81%BF%E3%81%8B%E3%82%89%E8%A1%8C%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E5%AD%A6%E7%BF%92%E6%B8%88%E3%81%BF%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%20%60deepcopy%60%20%E3%81%97%E3%81%A6%20CPU%20%E3%81%B8%E7%A7%BB%E3%81%97%E3%80%81%60eval()%60%20%E3%81%A7%0A%20%20%20%20dropout%20%E3%82%92%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%97%E3%81%9F%20%60cpu_model%60%20%E3%82%92%E3%80%81%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E5%A4%89%E6%8F%9B%E3%81%A8%E6%B8%AC%E5%AE%9A%E3%81%AE%E5%85%83%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60artifact_dir%60%20%3D%20notebook%20%E3%81%A8%E5%90%8C%E3%81%98%E5%A0%B4%E6%89%80%E3%81%AB%E4%BD%9C%E3%82%8B%E4%B8%80%E6%99%82%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%EF%BC%88%E6%9C%80%E5%BE%8C%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E5%89%8A%E9%99%A4%E3%81%97%E3%81%BE%E3%81%99%EF%BC%89%E3%80%81%0A%20%20%20%20%20%20%60cpu_model%60%20%3D%20CPU%20%E4%B8%8A%E3%81%AE%E6%8E%A8%E8%AB%96%E7%94%A8%E3%83%A2%E3%83%87%E3%83%AB%E3%80%81%60cpu_input%60%20%3D%208%20%E6%9E%9A%E3%81%AE%E5%85%A5%E5%8A%9B%E3%80%81%0A%20%20%20%20%20%20%60native_logits_cpu%60%20%3D%20%E6%AF%94%E8%BC%83%E3%81%AE%E5%9F%BA%E6%BA%96%E3%81%AB%E3%81%AA%E3%82%8B%20logits%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(model%2C%20sample_input)%3A%0A%20%20%20%20artifact_dir%20%3D%20Path(__file__).with_name(%22mnist_convert_artifacts%22)%0A%20%20%20%20artifact_dir.mkdir(exist_ok%3DTrue)%0A%20%20%20%20cpu_model%20%3D%20copy.deepcopy(model).to(%22cpu%22).eval()%0A%20%20%20%20cpu_input%20%3D%20sample_input.cpu()%0A%20%20%20%20with%20torch.no_grad()%3A%0A%20%20%20%20%20%20%20%20native_logits_cpu%20%3D%20cpu_model(cpu_input)%0A%20%20%20%20return%20artifact_dir%2C%20cpu_input%2C%20cpu_model%2C%20native_logits_cpu%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%201.%20TorchScript%0A%0A%20%20%20%20%60torch.jit.script%60%20%E3%81%AF%20Python%20%E3%81%A7%E6%9B%B8%E3%81%84%E3%81%9F%E3%83%A2%E3%83%87%E3%83%AB%E5%AE%9A%E7%BE%A9%E3%82%92%20TorchScript%20%E3%81%AE%E4%B8%AD%E9%96%93%E8%A1%A8%E7%8F%BE%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82Python%0A%20%20%20%20%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%97%E3%83%AA%E3%82%BF%E3%81%AA%E3%81%97%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%82%8B%E5%BD%A2%E5%BC%8F%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%95%E3%82%8C%E3%82%8B%E6%BC%94%E7%AE%97%E3%81%9D%E3%81%AE%E3%82%82%E3%81%AE%E3%81%AF%20PyTorch%20%E3%81%A8%E5%90%8C%E3%81%98%0A%20%20%20%20ATen%20%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%60cpu_model%60%E3%80%81%60cpu_input%60%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9Ascript%20%E5%8C%96%E3%81%97%E3%81%A6%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%B8%E4%BF%9D%E5%AD%98%E3%81%97%E3%80%81%E8%AA%AD%E3%81%BF%E7%9B%B4%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%E6%8E%A8%E8%AB%96%E3%81%97%E3%81%BE%E3%81%99%EF%BC%88%E4%BF%9D%E5%AD%98%E3%81%A8%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%82%92%E7%B5%8C%E7%94%B1%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%E3%81%93%E3%81%A8%E3%81%A7%E3%80%81%E5%AE%9F%E9%9A%9B%E3%81%AB%E9%85%8D%E5%B8%83%E3%81%99%E3%82%8B%E5%BD%A2%E3%81%A8%E5%90%8C%E3%81%98%E7%B5%8C%E8%B7%AF%E3%82%92%E6%B8%AC%E3%82%8A%E3%81%BE%E3%81%99%EF%BC%89%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60scripted_model%60%E3%80%81%60torchscript_logits%60%E3%80%81%60torchscript_setup_ms%60%20%3D%20%E5%A4%89%E6%8F%9B%E3%81%AB%E3%81%8B%E3%81%8B%E3%81%A3%E3%81%9F%E6%99%82%E9%96%93%20%5Bms%5D%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(artifact_dir%2C%20cpu_input%2C%20cpu_model)%3A%0A%20%20%20%20script_path%20%3D%20artifact_dir%20%2F%20%22mnist_cnn_script.pt%22%0A%20%20%20%20_start%20%3D%20time.perf_counter()%0A%20%20%20%20torch.jit.script(cpu_model).save(script_path)%0A%20%20%20%20scripted_model%20%3D%20torch.jit.load(script_path)%0A%20%20%20%20torchscript_setup_ms%20%3D%20(time.perf_counter()%20-%20_start)%20*%201e3%0A%20%20%20%20with%20torch.no_grad()%3A%0A%20%20%20%20%20%20%20%20torchscript_logits%20%3D%20scripted_model(cpu_input)%0A%20%20%20%20print(f%22TorchScript%3A%20%7Btorchscript_setup_ms%3A.0f%7D%20ms%2C%20%7Bscript_path.stat().st_size%20%2F%201e6%3A.2f%7D%20MB%22)%0A%20%20%20%20return%20scripted_model%2C%20torchscript_logits%2C%20torchscript_setup_ms%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.%20ONNX%20%E3%81%A8%20ONNX%20Runtime%EF%BC%88CPU%20%E3%81%A8%20CUDA%EF%BC%89%0A%0A%20%20%20%20ONNX%20%E3%81%AF%20framework%20%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%AA%E3%81%84%E3%82%B0%E3%83%A9%E3%83%95%E8%A1%A8%E7%8F%BE%E3%81%A7%E3%80%81ONNX%20Runtime%20%E3%81%AF%E3%81%9D%E3%82%8C%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%8E%A8%E8%AB%96%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%60dynamic_axes%60%20%E3%81%A7%20batch%20%E6%AC%A1%E5%85%83%E3%82%92%E5%8F%AF%E5%A4%89%E3%81%AB%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%9F%E3%82%81%E3%80%811%20%E3%81%A4%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A7%E3%81%A9%E3%81%AE%20batch%20size%20%E3%82%82%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%8C%E4%BB%96%E3%81%AE%203%20%E7%B5%8C%E8%B7%AF%E3%81%A8%E9%81%95%E3%81%86%E7%82%B9%E3%81%A8%E3%81%97%E3%81%A6%E3%80%81**%E5%90%8C%E3%81%98%20ONNX%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%20CPU%20%E3%81%A8%20GPU%20%E3%81%AE%20session%20%E3%82%92%E4%B8%A1%E6%96%B9%E4%BD%9C%E3%82%8C%E3%81%BE%E3%81%99**%E3%80%82%0A%20%20%20%20ONNX%20Runtime%20%E3%81%AF%E6%BC%94%E7%AE%97%E3%81%AE%E5%AE%9F%E8%A3%85%E3%82%92%20execution%20provider%EF%BC%88EP%EF%BC%89%E3%81%A8%E3%81%97%E3%81%A6%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%88%E3%82%8B%E8%A8%AD%E8%A8%88%E3%81%A7%E3%80%81%60onnxruntime-gpu%60%0A%20%20%20%20package%20%E3%81%AB%E3%81%AF%20%60CPUExecutionProvider%60%20%E3%81%A8%20%60CUDAExecutionProvider%60%20%E3%81%AE%E4%B8%A1%E6%96%B9%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E3%81%9F%E3%82%81%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E3%82%B0%E3%83%A9%E3%83%95%E3%82%82%E9%87%8D%E3%81%BF%E3%82%82%E5%85%B1%E9%80%9A%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81**%E5%90%8C%E3%81%98%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%20CPU%20%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%E3%81%8B%20GPU%20%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%E3%81%8B**%E3%81%A0%E3%81%91%E3%82%92%E6%AF%94%E3%81%B9%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%60cpu_model%60%E3%80%81%60cpu_input%60%EF%BC%88%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%20trace%20%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E4%BE%8B%EF%BC%89%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9Aopset%2018%20%E3%81%A7%20export%20%E2%86%92%20%60onnx.checker%60%20%E3%81%A7%E5%A6%A5%E5%BD%93%E6%80%A7%E3%82%92%E6%A4%9C%E6%9F%BB%20%E2%86%92%20CPU%20EP%20%E3%81%AE%20session%20%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%80%81%0A%20%20%20%20%20%20CUDA%20EP%20%E3%81%8C%E4%BD%BF%E3%81%88%E3%82%8C%E3%81%B0%E5%90%8C%E3%81%98%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%20GPU%20%E7%94%A8%E3%81%AE%20session%20%E3%82%82%E4%BD%9C%E6%88%90%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60onnx_logits%60%20%2F%20%60onnx_cuda_logits%60%E3%80%81%60ort_session%60%20%2F%20%60ort_cuda_session%60%E3%80%81%0A%20%20%20%20%20%20%60onnx_setup_ms%60%20%2F%20%60onnx_cuda_setup_ms%60%0A%20%20%20%20-%20session%20%E4%BD%9C%E6%88%90%E6%99%82%E3%81%AB%E3%82%B0%E3%83%A9%E3%83%95%E6%9C%80%E9%81%A9%E5%8C%96%EF%BC%88%E5%AE%9A%E6%95%B0%E3%81%AE%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81%E6%BC%94%E7%AE%97%E3%81%AE%E8%9E%8D%E5%90%88%E3%80%81%E3%83%A1%E3%83%A2%E3%83%AA%E7%A2%BA%E4%BF%9D%E3%81%AE%E8%A8%88%E7%94%BB%EF%BC%89%E3%81%8C%E8%B5%B0%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%0A%20%20%20%20%20%20%60onnx_setup_ms%60%20%E3%81%AB%E3%81%AF%20export%20%E3%81%A0%E3%81%91%E3%81%A7%E3%81%AA%E3%81%8F%E6%9C%80%E9%81%A9%E5%8C%96%E3%81%AE%E6%99%82%E9%96%93%E3%82%82%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%60onnx_cuda_setup_ms%60%20%E3%81%AF%0A%20%20%20%20%20%20export%20%E6%B8%88%E3%81%BF%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%20session%20%E3%82%92%E4%BD%9C%E3%82%8B%E6%99%82%E9%96%93%E3%81%A0%E3%81%91%E3%81%A7%E3%81%99%0A%20%20%20%20-%20%60session.run()%60%20%E3%81%AF%20host%20%E4%B8%8A%E3%81%AE%20NumPy%20%E9%85%8D%E5%88%97%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%81%A3%E3%81%A6%E8%BF%94%E3%81%99%E3%81%9F%E3%82%81%E3%80%81CUDA%20EP%20%E3%81%AE%E6%B8%AC%E5%AE%9A%E5%80%A4%E3%81%AB%E3%81%AF%0A%20%20%20%20%20%20host%20%E3%81%A8%20device%20%E3%81%AE%E9%96%93%E3%81%AE%E8%BB%A2%E9%80%81%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82PyTorch%20%E3%81%AE%E3%80%8C%E8%BB%A2%E9%80%81%E8%BE%BC%E3%81%BF%E3%80%8D%E3%81%A8%E5%90%8C%E3%81%98%E5%9C%9F%E4%BF%B5%E3%81%AE%E5%80%A4%E3%81%A7%E3%81%99%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(artifact_dir%2C%20available%2C%20cpu_input%2C%20cpu_model)%3A%0A%20%20%20%20onnx_path%20%3D%20artifact_dir%20%2F%20%22mnist_cnn.onnx%22%0A%20%20%20%20onnx_logits%20%3D%20None%0A%20%20%20%20onnx_cuda_logits%20%3D%20None%0A%20%20%20%20onnx_cuda_fp32_logits%20%3D%20None%0A%20%20%20%20ort_session%20%3D%20None%0A%20%20%20%20ort_cuda_session%20%3D%20None%0A%20%20%20%20onnx_setup_ms%20%3D%20float(%22nan%22)%0A%20%20%20%20onnx_cuda_setup_ms%20%3D%20float(%22nan%22)%0A%20%20%20%20if%20available%5B%22onnx%22%5D%3A%0A%20%20%20%20%20%20%20%20import%20onnx%0A%0A%20%20%20%20%20%20%20%20_start%20%3D%20time.perf_counter()%0A%20%20%20%20%20%20%20%20torch.onnx.export(%0A%20%20%20%20%20%20%20%20%20%20%20%20cpu_model%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20cpu_input%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20str(onnx_path)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20input_names%3D%5B%22input%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20output_names%3D%5B%22logits%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20dynamic_axes%3D%7B%22input%22%3A%20%7B0%3A%20%22batch%22%7D%2C%20%22logits%22%3A%20%7B0%3A%20%22batch%22%7D%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20opset_version%3D18%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20dynamo%3DFalse%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20onnx.checker.check_model(onnx.load(str(onnx_path)))%0A%20%20%20%20%20%20%20%20if%20available%5B%22onnxruntime%22%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20import%20onnxruntime%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20ort_session%20%3D%20onnxruntime.InferenceSession(str(onnx_path)%2C%20providers%3D%5B%22CPUExecutionProvider%22%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20onnx_setup_ms%20%3D%20(time.perf_counter()%20-%20_start)%20*%201e3%0A%20%20%20%20%20%20%20%20%20%20%20%20_input_name%20%3D%20ort_session.get_inputs()%5B0%5D.name%0A%20%20%20%20%20%20%20%20%20%20%20%20_input_values%20%3D%20cpu_input.numpy().astype(np.float32)%0A%20%20%20%20%20%20%20%20%20%20%20%20onnx_logits%20%3D%20ort_session.run(None%2C%20%7B_input_name%3A%20_input_values%7D)%5B0%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20print(f%22ONNX%20Runtime%3A%20%7Bonnx_setup_ms%3A.0f%7D%20ms%2C%20provider%3D%7Bort_session.get_providers()%5B0%5D%7D%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%22CUDAExecutionProvider%22%20in%20onnxruntime.get_available_providers()%20and%20torch.cuda.is_available()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_cuda_start%20%3D%20time.perf_counter()%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ort_cuda_session%20%3D%20onnxruntime.InferenceSession(str(onnx_path)%2C%20providers%3D%5B%22CUDAExecutionProvider%22%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onnx_cuda_setup_ms%20%3D%20(time.perf_counter()%20-%20_cuda_start)%20*%201e3%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onnx_cuda_logits%20%3D%20ort_cuda_session.run(None%2C%20%7B_input_name%3A%20_input_values%7D)%5B0%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_fp32_session%20%3D%20onnxruntime.InferenceSession(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20str(onnx_path)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20providers%3D%5B(%22CUDAExecutionProvider%22%2C%20%7B%22use_tf32%22%3A%200%7D)%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onnx_cuda_fp32_logits%20%3D%20_fp32_session.run(None%2C%20%7B_input_name%3A%20_input_values%7D)%5B0%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print(f%22ONNX%20Runtime%20CUDA%3A%20%7Bonnx_cuda_setup_ms%3A.0f%7D%20ms%2C%20provider%3D%7Bort_cuda_session.get_providers()%5B0%5D%7D%22)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20onnx_cuda_fp32_logits%2C%0A%20%20%20%20%20%20%20%20onnx_cuda_logits%2C%0A%20%20%20%20%20%20%20%20onnx_cuda_setup_ms%2C%0A%20%20%20%20%20%20%20%20onnx_logits%2C%0A%20%20%20%20%20%20%20%20onnx_path%2C%0A%20%20%20%20%20%20%20%20onnx_setup_ms%2C%0A%20%20%20%20%20%20%20%20ort_cuda_session%2C%0A%20%20%20%20%20%20%20%20ort_session%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%203.%20OpenVINO%0A%0A%20%20%20%20OpenVINO%20%E3%81%AF%20Intel%20%E7%B3%BB%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E5%90%91%E3%81%91%E3%81%AB%E6%9C%80%E9%81%A9%E5%8C%96%E3%81%95%E3%82%8C%E3%81%9F%E6%8E%A8%E8%AB%96%20runtime%20%E3%81%A7%E3%81%99%E3%80%82ONNX%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%B8%AD%E9%96%93%E8%A1%A8%E7%8F%BE%E3%81%B8%0A%20%20%20%20%E5%A4%89%E6%8F%9B%E3%81%97%E3%80%81%60compile_model%60%20%E3%81%AE%E6%99%82%E7%82%B9%E3%81%A7%E5%AF%BE%E8%B1%A1%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E5%90%91%E3%81%91%E3%81%AE%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%82%92%E7%94%9F%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20GPU%20%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%E3%81%93%E3%81%A8%E3%82%82%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E5%AF%BE%E8%B1%A1%E3%81%AF%20Intel%20%E3%81%AE%E5%86%85%E8%94%B5%20GPU%20%E3%82%84%20Arc%20%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81NVIDIA%20GPU%20%E3%81%AF%E6%89%B1%E3%81%88%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%81%93%E3%81%AE%E7%92%B0%E5%A2%83%E3%81%AE%20%60available_devices%60%20%E3%81%AF%20%60CPU%60%20%E3%81%A0%E3%81%91%E3%81%A7%E3%81%99%EF%BC%88%E3%80%8C%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%AE%E8%A8%98%E9%8C%B2%E3%80%8D%E3%81%AE%E8%A1%A8%E3%82%92%E5%8F%82%E7%85%A7%EF%BC%89%E3%80%82%0A%20%20%20%20%E3%81%9D%E3%81%AE%E3%81%9F%E3%82%81%20OpenVINO%20%E3%81%AF%20CPU%20%E3%81%A7%E3%81%AE%E6%AF%94%E8%BC%83%E3%81%AB%E9%99%90%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%E5%89%8D%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%81%9F%20%60onnx_path%60%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9A%60convert_model%60%20%E2%86%92%20%60compile_model(%22CPU%22)%60%E3%80%82CPU%20%E3%81%AE%E6%8E%A8%E8%AB%96%20runtime%20%E3%81%A9%E3%81%86%E3%81%97%E3%82%92%E6%AF%94%E3%81%B9%E3%82%8B%E3%81%AE%E3%81%8C%E7%9B%AE%E7%9A%84%0A%20%20%20%20%20%20%E3%81%AA%E3%81%AE%E3%81%A7%20device%20%E3%82%92%E6%98%8E%E7%A4%BA%E3%81%97%E3%80%81%E5%AE%9F%E9%9A%9B%E3%81%AB%E4%BD%BF%E3%82%8F%E3%82%8C%E3%81%9F%20device%20%E3%82%92%20%60EXECUTION_DEVICES%60%20%E3%81%8B%E3%82%89%E8%A8%98%E9%8C%B2%E3%81%97%E3%81%A6%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60openvino_logits%60%E3%80%81%60compiled_model%60%E3%80%81%60openvino_device%60%E3%80%81%60openvino_setup_ms%60%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(available%2C%20cpu_input%2C%20onnx_path)%3A%0A%20%20%20%20openvino_logits%20%3D%20None%0A%20%20%20%20compiled_model%20%3D%20None%0A%20%20%20%20openvino_device%20%3D%20%22%E3%81%AA%E3%81%97%22%0A%20%20%20%20openvino_setup_ms%20%3D%20float(%22nan%22)%0A%20%20%20%20if%20available%5B%22openvino%22%5D%20and%20onnx_path.exists()%3A%0A%20%20%20%20%20%20%20%20import%20openvino%20as%20ov%0A%0A%20%20%20%20%20%20%20%20_start%20%3D%20time.perf_counter()%0A%20%20%20%20%20%20%20%20compiled_model%20%3D%20ov.Core().compile_model(ov.convert_model(str(onnx_path))%2C%20%22CPU%22)%0A%20%20%20%20%20%20%20%20openvino_setup_ms%20%3D%20(time.perf_counter()%20-%20_start)%20*%201e3%0A%20%20%20%20%20%20%20%20openvino_device%20%3D%20%22%2C%20%22.join(compiled_model.get_property(%22EXECUTION_DEVICES%22))%0A%20%20%20%20%20%20%20%20openvino_logits%20%3D%20compiled_model(%5Bcpu_input.numpy().astype(np.float32)%5D)%5Bcompiled_model.output(0)%5D%0A%20%20%20%20%20%20%20%20print(f%22OpenVINO%3A%20%7Bopenvino_setup_ms%3A.0f%7D%20ms%2C%20device%3D%7Bopenvino_device%7D%22)%0A%20%20%20%20return%20compiled_model%2C%20openvino_device%2C%20openvino_logits%2C%20openvino_setup_ms%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%204.%20ExecuTorch%0A%0A%20%20%20%20ExecuTorch%20%E3%81%AF%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%B3%E3%82%84%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF%E6%A9%9F%E5%99%A8%E3%81%A7%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%82%92%E6%83%B3%E5%AE%9A%E3%81%97%E3%81%9F%20PyTorch%20%E3%81%AE%20runtime%20%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%81%93%E3%81%BE%E3%81%A7%E3%81%AE%0A%20%20%20%203%20%E3%81%A4%E3%81%A8%E9%81%95%E3%81%84%E3%80%81**%E5%85%A5%E5%8A%9B%20shape%20%E3%81%94%E3%81%A8%E3%81%AB%E4%BA%8B%E5%89%8D%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%EF%BC%88AOT%EF%BC%89%E3%81%97%E3%81%9F%20%60.pte%60%20%E3%82%92%E4%BD%9C%E3%82%8B**%E7%82%B9%E3%81%8C%E7%89%B9%E5%BE%B4%E3%81%A7%E3%81%99%E3%80%82%E5%AE%9F%E8%A1%8C%E6%99%82%E3%81%AB%0A%20%20%20%20%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E7%B5%84%E3%81%BF%E6%9B%BF%E3%81%88%E3%81%AA%E3%81%84%E3%81%B6%E3%82%93%E3%80%81%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%92%E9%9D%99%E7%9A%84%E3%81%AB%E6%B1%BA%E3%82%81%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%A4%89%E6%8F%9B%E3%81%AF%203%20%E6%AE%B5%E9%9A%8E%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%201.%20%60torch.export.export%60%EF%BC%9A%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%20ATen%20%E6%BC%94%E7%AE%97%E3%81%AE%E3%82%B0%E3%83%A9%E3%83%95%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%BE%E3%81%99%EF%BC%88batch%20size%20%E3%81%AF%E5%9B%BA%E5%AE%9A%EF%BC%89%0A%20%20%20%202.%20%60to_edge_transform_and_lower%60%EF%BC%9Aedge%20%E6%96%B9%E8%A8%80%E3%81%B8%E8%90%BD%E3%81%A8%E3%81%97%E3%80%81%60partitioner%60%20%E3%81%AB%E6%B8%A1%E3%81%97%E3%81%9F%20backend%20%E3%81%8C%E6%89%B1%E3%81%88%E3%82%8B%0A%20%20%20%20%20%20%20%E9%83%A8%E5%88%86%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%20delegate%20%E3%81%A8%E3%81%97%E3%81%A6%E5%88%87%E3%82%8A%E5%87%BA%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%203.%20%60to_executorch%60%EF%BC%9A%E3%83%A1%E3%83%A2%E3%83%AA%E8%A8%88%E7%94%BB%E3%81%BE%E3%81%A7%E6%B8%88%E3%81%BE%E3%81%9B%E3%81%9F%20%60.pte%60%20%E3%82%92%E7%94%9F%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%0A%0A%20%20%20%20%60build_executorch_method()%60%20%E3%81%AF%E3%81%93%E3%81%AE%E4%B8%80%E9%80%A3%E3%81%AE%E5%87%A6%E7%90%86%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%9F%E9%96%A2%E6%95%B0%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%60module%60%EF%BC%88CPU%20%E4%B8%8A%E3%81%AE%20%60nn.Module%60%EF%BC%89%E3%80%81%60sample%60%EF%BC%88%E3%81%93%E3%81%AE%20shape%20%E5%B0%82%E7%94%A8%E3%81%AB%E5%9B%BA%E3%82%81%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E5%85%A5%E5%8A%9B%EF%BC%89%E3%80%81%0A%20%20%20%20%20%20%60partition%60%EF%BC%88CPU%20%E5%90%91%E3%81%91%E3%81%AE%20XNNPACK%20backend%20%E3%81%B8%20delegate%20%E3%81%99%E3%82%8B%E3%81%AA%E3%82%89%20%60True%60%E3%80%81%E5%8F%82%E7%85%A7%E5%AE%9F%E8%A3%85%E3%81%AE%0A%20%20%20%20%20%20portable%20kernels%20%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%AB%E3%81%99%E3%82%8B%E3%81%AA%E3%82%89%20%60False%60%EF%BC%89%E3%80%81%60tag%60%EF%BC%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%AE%E8%AD%98%E5%88%A5%E5%AD%90%EF%BC%89%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60(%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%82%8B%20method%2C%20%60.pte%60%20%E3%81%AE%E3%83%91%E3%82%B9%2C%20import%20%E3%81%8B%E3%82%89%20method%20%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%A7%E3%81%AE%E6%99%82%E9%96%93%20%5Bms%5D)%60%20%E3%81%AE%E3%82%BF%E3%83%97%E3%83%AB%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(artifact_dir%2C%20available)%3A%0A%20%20%20%20def%20build_executorch_method(module%2C%20sample%2C%20partition%3DTrue%2C%20tag%3D%22xnnpack%22)%3A%0A%20%20%20%20%20%20%20%20start%20%3D%20time.perf_counter()%0A%20%20%20%20%20%20%20%20from%20executorch.backends.xnnpack.partition.xnnpack_partitioner%20import%20XnnpackPartitioner%0A%20%20%20%20%20%20%20%20from%20executorch.exir%20import%20to_edge_transform_and_lower%0A%20%20%20%20%20%20%20%20from%20executorch.runtime%20import%20Runtime%0A%0A%20%20%20%20%20%20%20%20exported%20%3D%20torch.export.export(module%2C%20(sample%2C))%0A%20%20%20%20%20%20%20%20partitioners%20%3D%20%5BXnnpackPartitioner()%5D%20if%20partition%20else%20%5B%5D%0A%20%20%20%20%20%20%20%20program%20%3D%20to_edge_transform_and_lower(exported%2C%20partitioner%3Dpartitioners).to_executorch()%0A%20%20%20%20%20%20%20%20path%20%3D%20artifact_dir%20%2F%20f%22mnist_cnn_%7Btag%7D_%7Bsample.shape%5B0%5D%7D.pte%22%0A%20%20%20%20%20%20%20%20path.write_bytes(program.buffer)%0A%20%20%20%20%20%20%20%20method%20%3D%20Runtime.get().load_program(str(path)).load_method(%22forward%22)%0A%20%20%20%20%20%20%20%20setup_ms%20%3D%20(time.perf_counter()%20-%20start)%20*%201e3%0A%20%20%20%20%20%20%20%20return%20method%2C%20path%2C%20setup_ms%0A%0A%20%20%20%20executorch_ready%20%3D%20available%5B%22executorch%22%5D%0A%20%20%20%20return%20build_executorch_method%2C%20executorch_ready%0A%0A%0A%40app.cell%0Adef%20_(build_executorch_method%2C%20cpu_input%2C%20cpu_model%2C%20executorch_ready)%3A%0A%20%20%20%20executorch_logits%20%3D%20None%0A%20%20%20%20executorch_setup_ms%20%3D%20float(%22nan%22)%0A%20%20%20%20if%20executorch_ready%3A%0A%20%20%20%20%20%20%20%20_method%2C%20_path%2C%20executorch_setup_ms%20%3D%20build_executorch_method(cpu_model%2C%20cpu_input)%0A%20%20%20%20%20%20%20%20executorch_logits%20%3D%20_method.execute(%5Bcpu_input%5D)%5B0%5D.detach()%0A%20%20%20%20%20%20%20%20print(f%22ExecuTorch%20(XNNPACK)%3A%20%7Bexecutorch_setup_ms%3A.0f%7D%20ms%2C%20%7B_path.stat().st_size%20%2F%201e6%3A.2f%7D%20MB%22)%0A%20%20%20%20return%20executorch_logits%2C%20executorch_setup_ms%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%87%BA%E5%8A%9B%E3%81%AE%E4%B8%80%E8%87%B4%0A%0A%20%20%20%20%E5%9F%BA%E6%BA%96%E3%81%A8%E3%81%AA%E3%82%8B%20%60cpu_model%60%20%E3%81%AE%20logits%20%E3%81%A8%E3%80%81%E5%90%84%E5%A4%89%E6%8F%9B%E5%85%88%E3%81%AE%20logits%20%E3%81%AE%E6%9C%80%E5%A4%A7%E7%B5%B6%E5%AF%BE%E5%B7%AE%E3%82%92%E6%AF%94%E3%81%B9%E3%81%BE%E3%81%99%E3%80%82%E4%BA%88%E6%B8%AC%E3%83%A9%E3%83%99%E3%83%AB%E3%81%AF%0A%20%20%20%20%E3%81%A9%E3%81%AE%20runtime%20%E3%81%A7%E3%82%82%E5%AE%8C%E5%85%A8%E3%81%AB%E4%B8%80%E8%87%B4%E3%81%97%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E6%BC%94%E7%AE%97%E3%81%AE%E9%A0%86%E5%BA%8F%E3%82%84%E8%9E%8D%E5%90%88%E3%81%AE%E4%BB%95%E6%96%B9%E3%80%81%E3%81%9D%E3%81%97%E3%81%A6**%E4%BD%BF%E3%81%86%E6%95%B0%E5%80%A4%E5%BD%A2%E5%BC%8F**%E3%81%8C%0A%20%20%20%20runtime%20%E3%81%94%E3%81%A8%E3%81%AB%E9%81%95%E3%81%86%E3%81%9F%E3%82%81%E3%80%81%E5%B7%AE%E3%81%8C%E3%81%A1%E3%82%87%E3%81%86%E3%81%A9%200%20%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%A8%E3%81%AF%E9%99%90%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82ONNX%20Runtime%20%E3%81%AF%20CPU%20EP%20%E3%81%A8%0A%20%20%20%20CUDA%20EP%20%E3%82%92%E5%88%A5%E3%80%85%E3%81%AB%E6%A4%9C%E6%9F%BB%E3%81%99%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81**GPU%20%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AB%E4%BD%95%E3%81%8C%E3%81%A9%E3%82%8C%E3%81%A0%E3%81%91%E5%A4%89%E3%82%8F%E3%82%8B%E3%81%8B**%E3%82%82%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E4%B8%80%E8%87%B4%E3%81%AF%E6%96%87%E7%AB%A0%E3%81%A7%E4%B8%BB%E5%BC%B5%E3%81%99%E3%82%8B%E3%81%A0%E3%81%91%E3%81%A7%E3%81%AA%E3%81%8F%E3%80%81%60assert%60%20%E3%81%A7%E6%A4%9C%E6%9F%BB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%B0%86%E6%9D%A5%20runtime%20%E3%82%84%E7%92%B0%E5%A2%83%E3%81%8C%E5%A4%89%E3%82%8F%E3%81%A3%E3%81%A6%E5%87%BA%E5%8A%9B%E3%81%8C%0A%20%20%20%20%E3%81%9A%E3%82%8C%E3%81%9F%E5%A0%B4%E5%90%88%E3%80%81%E3%81%93%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%8C%E5%A4%B1%E6%95%97%E3%81%97%E3%81%A6%20page%20%E3%81%AE%E7%94%9F%E6%88%90%E8%87%AA%E4%BD%93%E3%81%8C%E6%AD%A2%E3%81%BE%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E8%AA%A4%E3%81%A3%E3%81%9F%E4%B8%BB%E5%BC%B5%E3%81%8C%E5%85%AC%E9%96%8B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%0A%20%20%20%20%E3%81%9F%E3%81%A0%E3%81%97%20**GPU%20%E3%81%A0%E3%81%91%E3%81%AF%E8%A8%B1%E5%AE%B9%E8%AA%A4%E5%B7%AE%E3%82%92%E5%88%86%E3%81%91%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99**%E3%80%82Ampere%20%E4%B8%96%E4%BB%A3%E4%BB%A5%E9%99%8D%E3%81%AE%20NVIDIA%20GPU%20%E3%81%A7%E3%81%AF%E3%80%81ONNX%20Runtime%20%E3%81%AE%0A%20%20%20%20CUDA%20EP%20%E3%81%8C%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%AB%E6%97%A2%E5%AE%9A%E3%81%A7%20**TF32**%20%E3%82%92%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82TF32%20%E3%81%AF%E6%8C%87%E6%95%B0%E9%83%A8%E3%82%92%20float32%20%E3%81%A8%E5%90%8C%E3%81%98%E3%81%AB%E3%81%97%E3%81%9F%E3%81%BE%E3%81%BE%E4%BB%AE%E6%95%B0%E9%83%A8%E3%82%92%0A%20%20%20%2010%20bit%20%E3%81%AB%E6%B8%9B%E3%82%89%E3%81%99%E5%BD%A2%E5%BC%8F%E3%81%A7%E3%80%81%E8%A1%8C%E5%88%97%E7%A9%8D%E3%82%92%E5%A4%A7%E5%B9%85%E3%81%AB%E9%80%9F%E3%81%8F%E3%81%99%E3%82%8B%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%E7%B2%BE%E5%BA%A6%E3%81%8C%E8%90%BD%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82%E5%AE%9F%E9%9A%9B%E3%80%81provider%20option%0A%20%20%20%20%60use_tf32%3A%200%60%20%E3%82%92%E6%B8%A1%E3%81%97%E3%81%A6%20TF32%20%E3%82%92%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E5%B7%AE%E3%81%AF%20CPU%20%E3%81%A8%E5%90%8C%E3%81%98%E6%B0%B4%E6%BA%96%E3%81%BE%E3%81%A7%E5%B0%8F%E3%81%95%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E4%B8%8B%E3%81%AE%E8%A1%A8%E3%81%A7%E3%81%AF%0A%20%20%20%20%E6%97%A2%E5%AE%9A%E3%81%A8%20TF32%20%E7%84%A1%E5%8A%B9%E3%81%AE%E4%B8%A1%E6%96%B9%E3%82%92%E4%B8%A6%E3%81%B9%E3%81%A6%E3%80%81%E3%81%93%E3%81%AE%E9%81%95%E3%81%84%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%0A%0A%20%20%20%20-%20%E8%A8%B1%E5%AE%B9%E8%AA%A4%E5%B7%AE%EF%BC%9Afloat32%20%E3%81%A7%E8%A8%88%E7%AE%97%E3%81%99%E3%82%8B%20runtime%20%E3%81%AF%20%601e-4%60%20%E6%9C%AA%E6%BA%80%E3%80%81TF32%20%E3%82%92%E4%BD%BF%E3%81%86%20CUDA%20EP%20%E3%81%AE%E6%97%A2%E5%AE%9A%E3%81%AF%20%605e-3%60%20%E6%9C%AA%E6%BA%80%0A%20%20%20%20-%20%E3%81%A9%E3%81%AE%20runtime%20%E3%81%A7%E3%82%82**%E4%BA%88%E6%B8%AC%E3%83%A9%E3%83%99%E3%83%AB%E3%81%AF%E5%9F%BA%E6%BA%96%E3%81%A8%E5%AE%8C%E5%85%A8%E4%B8%80%E8%87%B4**%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E8%A6%81%E6%B1%82%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60comparison_frame%60%20%3D%20runtime%20%E3%81%94%E3%81%A8%E3%81%AE%E6%9C%80%E5%A4%A7%E7%B5%B6%E5%AF%BE%E5%B7%AE%E3%81%A8%E8%A8%B1%E5%AE%B9%E5%80%A4%E3%80%81%60prediction_table%60%20%3D%208%20%E6%9E%9A%E3%81%AE%E4%BA%88%E6%B8%AC%E3%80%81%0A%20%20%20%20%20%20%60note_frame%60%20%3D%20%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%9A%E6%AF%94%E8%BC%83%E3%81%8B%E3%82%89%E5%A4%96%E3%81%97%E3%81%9F%20runtime%20%E3%81%AE%E4%B8%80%E8%A6%A7%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20available%2C%0A%20%20%20%20executorch_logits%2C%0A%20%20%20%20native_logits_cpu%2C%0A%20%20%20%20onnx_cuda_fp32_logits%2C%0A%20%20%20%20onnx_cuda_logits%2C%0A%20%20%20%20onnx_logits%2C%0A%20%20%20%20openvino_logits%2C%0A%20%20%20%20sample_labels%2C%0A%20%20%20%20torchscript_logits%2C%0A)%3A%0A%20%20%20%20def%20to_array(values)%3A%0A%20%20%20%20%20%20%20%20if%20values%20is%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20None%0A%20%20%20%20%20%20%20%20if%20isinstance(values%2C%20torch.Tensor)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20values.detach().numpy()%0A%20%20%20%20%20%20%20%20return%20np.asarray(values)%0A%0A%20%20%20%20reference_logits%20%3D%20native_logits_cpu.detach().numpy()%0A%20%20%20%20reference_predictions%20%3D%20reference_logits.argmax(axis%3D1)%0A%20%20%20%20float32_tolerance%20%3D%201e-4%0A%20%20%20%20tf32_tolerance%20%3D%205e-3%0A%20%20%20%20candidate_logits%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%22torch%20(CPU)%22%3A%20(reference_logits%2C%20float32_tolerance)%2C%0A%20%20%20%20%20%20%20%20%22torchscript%22%3A%20(to_array(torchscript_logits)%2C%20float32_tolerance)%2C%0A%20%20%20%20%20%20%20%20%22onnxruntime%20(CPU)%22%3A%20(to_array(onnx_logits)%2C%20float32_tolerance)%2C%0A%20%20%20%20%20%20%20%20%22onnxruntime%20(CUDA%2C%20%E6%97%A2%E5%AE%9A%3DTF32)%22%3A%20(to_array(onnx_cuda_logits)%2C%20tf32_tolerance)%2C%0A%20%20%20%20%20%20%20%20%22onnxruntime%20(CUDA%2C%20TF32%20%E7%84%A1%E5%8A%B9)%22%3A%20(to_array(onnx_cuda_fp32_logits)%2C%20float32_tolerance)%2C%0A%20%20%20%20%20%20%20%20%22openvino%22%3A%20(to_array(openvino_logits)%2C%20float32_tolerance)%2C%0A%20%20%20%20%20%20%20%20%22executorch%22%3A%20(to_array(executorch_logits)%2C%20float32_tolerance)%2C%0A%20%20%20%20%7D%0A%20%20%20%20comparison_rows%20%3D%20%5B%5D%0A%20%20%20%20prediction_table%20%3D%20pd.DataFrame(%7B%22true%22%3A%20sample_labels.numpy()%7D)%0A%20%20%20%20for%20_name%2C%20(_values%2C%20_tolerance)%20in%20candidate_logits.items()%3A%0A%20%20%20%20%20%20%20%20if%20_values%20is%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%20%20%20%20%20%20%20%20if%20_values.shape%20!%3D%20reference_logits.shape%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20AssertionError(f%22%7B_name%7D%20%E3%81%AE%E5%87%BA%E5%8A%9B%20shape%20%E3%81%8C%E5%9F%BA%E6%BA%96%E3%81%A8%E4%B8%80%E8%87%B4%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%3A%20%7B_values.shape%7D%22)%0A%20%20%20%20%20%20%20%20if%20not%20np.isfinite(_values).all()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20AssertionError(f%22%7B_name%7D%20%E3%81%AE%E5%87%BA%E5%8A%9B%E3%81%AB%E6%9C%89%E9%99%90%E3%81%A7%E3%81%AA%E3%81%84%E5%80%A4%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%22)%0A%20%20%20%20%20%20%20%20_max_abs_diff%20%3D%20float(np.max(np.abs(_values%20-%20reference_logits)))%0A%20%20%20%20%20%20%20%20_predictions%20%3D%20_values.argmax(axis%3D1)%0A%20%20%20%20%20%20%20%20if%20_max_abs_diff%20%3E%3D%20_tolerance%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20AssertionError(f%22%7B_name%7D%20%E3%81%AE%E6%9C%80%E5%A4%A7%E7%B5%B6%E5%AF%BE%E5%B7%AE%20%7B_max_abs_diff%3A.3e%7D%20%E3%81%8C%E8%A8%B1%E5%AE%B9%E5%80%A4%20%7B_tolerance%3A.0e%7D%20%E3%82%92%E8%B6%85%E3%81%88%E3%81%BE%E3%81%97%E3%81%9F%22)%0A%20%20%20%20%20%20%20%20if%20not%20np.array_equal(_predictions%2C%20reference_predictions)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20AssertionError(f%22%7B_name%7D%20%E3%81%AE%E4%BA%88%E6%B8%AC%E3%83%A9%E3%83%99%E3%83%AB%E3%81%8C%E5%9F%BA%E6%BA%96%E3%81%A8%E4%B8%80%E8%87%B4%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%22)%0A%20%20%20%20%20%20%20%20comparison_rows.append(%7B%22runtime%22%3A%20_name%2C%20%22max_abs_diff%22%3A%20_max_abs_diff%2C%20%22%E8%A8%B1%E5%AE%B9%E5%80%A4%22%3A%20_tolerance%7D)%0A%20%20%20%20%20%20%20%20prediction_table%5B_name%5D%20%3D%20_predictions%0A%20%20%20%20comparison_frame%20%3D%20pd.DataFrame(comparison_rows)%0A%20%20%20%20_notes%20%3D%20%5Bf%22%7B_name%7D%20%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E6%AF%94%E8%BC%83%E3%81%8B%E3%82%89%E9%99%A4%E5%A4%96%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%22%20for%20_name%2C%20_found%20in%20available.items()%20if%20not%20_found%5D%0A%20%20%20%20if%20available%5B%22openvino%22%5D%20and%20not%20available%5B%22onnx%22%5D%3A%0A%20%20%20%20%20%20%20%20_notes.append(%22openvino%20%E3%81%AF%20ONNX%20%E3%81%8C%E7%84%A1%E3%81%8F%E5%85%A5%E5%8A%9B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E3%82%8C%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E6%AF%94%E8%BC%83%E3%81%8B%E3%82%89%E9%99%A4%E5%A4%96%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%22)%0A%20%20%20%20note_frame%20%3D%20pd.DataFrame(%7B%22note%22%3A%20_notes%20or%20%5B%22%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E5%A4%89%E6%8F%9B%E5%85%88%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%22%5D%7D)%0A%20%20%20%20mo.vstack(%5Bcomparison_frame%2C%20prediction_table%2C%20note_frame%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E6%8E%A8%E8%AB%96%E6%99%82%E9%96%93%E3%81%AE%E6%B8%AC%E3%82%8A%E6%96%B9%0A%0A%20%20%20%20%E5%90%8C%E3%81%98%E9%87%8D%E3%81%BF%E3%83%BB%E5%90%8C%E3%81%98%E5%85%A5%E5%8A%9B%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E3%80%81batch%20size%20%E3%82%92%201%E3%83%BB8%E3%83%BB64%E3%83%BB256%20%E3%81%A8%E5%A4%89%E3%81%88%E3%81%AA%E3%81%8C%E3%82%89%201%20%E5%9B%9E%E3%81%AE%E6%8E%A8%E8%AB%96%E3%81%AB%E3%81%8B%E3%81%8B%E3%82%8B%E6%99%82%E9%96%93%E3%82%92%0A%20%20%20%20%E6%B8%AC%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E6%B8%AC%E5%AE%9A%E6%9D%A1%E4%BB%B6%E3%81%AF%E6%AC%A1%E3%81%AE%E3%81%A8%E3%81%8A%E3%82%8A%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20**warmup%20%E3%82%92%E3%80%8C5%20%E5%9B%9E%E4%BB%A5%E4%B8%8A%E3%80%81%E3%81%8B%E3%81%A4%E5%90%88%E8%A8%88%200.3%20%E7%A7%92%E4%BB%A5%E4%B8%8A%E3%80%8D%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%E6%B8%AC%E3%82%8A%E3%81%BE%E3%81%99**%E3%80%82%E5%88%9D%E5%9B%9E%E3%81%AE%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%81%AB%E3%81%AF%0A%20%20%20%20%20%20cuDNN%20%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E9%81%B8%E6%8A%9E%E3%80%81%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%A2%E3%83%AA%E3%83%BC%E3%83%8A%E3%81%AE%E7%A2%BA%E4%BF%9D%E3%80%81%E9%81%85%E5%BB%B6%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%A8%E3%81%84%E3%81%A3%E3%81%9F%E4%B8%80%E5%BA%A6%E3%81%8D%E3%82%8A%E3%81%AE%E3%82%B3%E3%82%B9%E3%83%88%E3%81%8C%0A%20%20%20%20%20%20%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E3%81%9F%E3%82%81%E3%81%A7%E3%81%99%E3%80%82%E5%8A%A0%E3%81%88%E3%81%A6%20GPU%20%E3%81%AF%E8%B2%A0%E8%8D%B7%E3%81%8C%E3%81%8B%E3%81%8B%E3%82%8B%E3%81%BE%E3%81%A7%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E4%B8%8A%E3%81%8C%E3%82%89%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%80%81%E6%B8%AC%E5%AE%9A%E3%82%92%E5%A7%8B%E3%82%81%E3%82%8B%E5%89%8D%E3%81%AB%0A%20%20%20%20%20%201%20%E7%A7%92%E9%96%93%E3%81%A0%E3%81%91%E7%A9%BA%E5%9B%9E%E3%81%97%E3%81%97%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%90%84%E6%B8%AC%E5%AE%9A%E3%81%AE%E7%9B%B4%E5%89%8D%E3%81%AB%200.1%20%E7%A7%92%E5%BE%85%E3%81%A1%E3%81%BE%E3%81%99%E3%80%82ONNX%20Runtime%20%E3%82%84%20XNNPACK%20%E3%81%AE%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%83%97%E3%83%BC%E3%83%AB%E3%81%AF%E4%BB%95%E4%BA%8B%E3%81%8C%E7%B5%82%E3%82%8F%E3%81%A3%E3%81%9F%0A%20%20%20%20%20%20%E3%81%82%E3%81%A8%E3%82%82%E3%81%97%E3%81%B0%E3%82%89%E3%81%8F%20spin%20%E3%81%97%E3%81%A6%20CPU%20%E3%82%92%E5%8D%A0%E6%9C%89%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E7%9B%B4%E5%89%8D%E3%81%AB%E6%B8%AC%E3%81%A3%E3%81%9F%20runtime%20%E3%81%AE%E5%BD%B1%E9%9F%BF%E3%82%92%E5%8F%97%E3%81%91%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20-%2030%20%E5%9B%9E%E6%B8%AC%E3%81%A3%E3%81%A6**%E4%B8%AD%E5%A4%AE%E5%80%A4**%E3%82%92%E6%8E%A1%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E5%B9%B3%E5%9D%87%E3%81%A0%E3%81%A8%20OS%20%E3%81%AE%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%AB%E3%82%88%E3%82%8B%E5%A4%96%E3%82%8C%E5%80%A4%E3%81%AB%E5%BC%95%E3%81%8D%E3%81%9A%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%0A%20%20%20%20%20%20%EF%BC%881%20%E5%9B%9E%E3%81%8C%205%20ms%20%E3%82%92%E4%B8%8B%E5%9B%9E%E3%82%8B%E6%9D%A1%E4%BB%B6%E3%81%A7%E3%81%AF%E3%80%81%E8%A4%87%E6%95%B0%E5%9B%9E%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E8%A8%88%E6%B8%AC%E3%81%97%E3%81%A6%201%20%E5%9B%9E%E3%81%82%E3%81%9F%E3%82%8A%E3%81%AB%E5%89%B2%E3%82%8A%E6%88%BB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%20%20%E3%81%BE%E3%81%9F%201%20%E3%81%A4%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%81%8C%202.5%20%E7%A7%92%E3%82%92%E8%B6%85%E3%81%88%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AF%E9%80%94%E4%B8%AD%E3%81%A7%E6%89%93%E3%81%A1%E5%88%87%E3%82%8A%E3%81%BE%E3%81%99%EF%BC%89%0A%20%20%20%20-%20GPU%20%E3%82%92%E4%BD%BF%E3%81%86%E6%9D%A1%E4%BB%B6%EF%BC%88PyTorch%20%E3%81%AE%202%20%E3%81%A4%E3%81%A8%20ONNX%20Runtime%20CUDA%EF%BC%89%E3%81%AF%E3%80%81CPU%20%E3%81%AE%20runtime%20%E3%82%88%E3%82%8A%E5%85%88%E3%81%AB%E6%B8%AC%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%20%20CPU%20%E5%81%B4%E3%81%AE%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%83%97%E3%83%BC%E3%83%AB%E3%81%AE%E5%BD%B1%E9%9F%BF%E3%82%92%E5%8F%97%E3%81%91%E3%81%AB%E3%81%8F%E3%81%8F%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%A7%E3%81%99%0A%20%20%20%20-%20PyTorch%20%E3%81%AE%20GPU%20%E5%AE%9F%E8%A1%8C%E3%81%AF%E9%9D%9E%E5%90%8C%E6%9C%9F%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%60synchronize()%60%20%E3%81%A7%E5%AE%8C%E4%BA%86%E3%82%92%E5%BE%85%E3%81%A3%E3%81%A6%E3%81%8B%E3%82%89%E6%99%82%E5%88%BB%E3%82%92%E8%AA%AD%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%20%20ONNX%20Runtime%20%E3%81%AE%20%60run()%60%20%E3%81%AF%E7%B5%90%E6%9E%9C%E3%82%92%20host%20%E3%81%B8%E8%BF%94%E3%81%97%E3%81%A6%E6%88%BB%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E5%90%8C%E6%9C%9F%E3%81%AF%E4%B8%8D%E8%A6%81%E3%81%A7%E3%81%99%0A%20%20%20%20-%20PyTorch%20%E3%81%AE%20GPU%20%E3%81%AF%E3%80%8C%E8%A8%88%E7%AE%97%E3%81%AE%E3%81%BF%E3%80%8D%E3%81%A8%E3%80%8C%E5%85%A5%E5%8A%9B%E3%81%AE%E8%BB%A2%E9%80%81%E3%81%A8%E7%B5%90%E6%9E%9C%E3%81%AE%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%97%E3%82%92%E5%90%AB%E3%82%80%E3%80%8D%E3%81%AE%202%20%E9%80%9A%E3%82%8A%E3%82%92%E6%B8%AC%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E5%AE%9F%E9%9A%9B%E3%81%AE%0A%20%20%20%20%20%20%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E6%94%AF%E6%89%95%E3%81%86%E3%81%AE%E3%81%AF%E5%BE%8C%E8%80%85%E3%81%A7%E3%81%99%E3%80%82ONNX%20Runtime%20CUDA%20%E3%81%AF%20NumPy%20%E9%85%8D%E5%88%97%E3%82%92%E5%8F%97%E3%81%91%E6%B8%A1%E3%81%99%20API%20%E3%81%AE%E3%81%9F%E3%82%81%0A%20%20%20%20%20%20%E5%B8%B8%E3%81%AB%E8%BB%A2%E9%80%81%E8%BE%BC%E3%81%BF%E3%81%A7%E3%80%81PyTorch%20%E3%81%AE%E3%80%8C%E8%BB%A2%E9%80%81%E8%BE%BC%E3%81%BF%E3%80%8D%E3%81%A8%E6%AF%94%E3%81%B9%E3%82%8B%E3%81%AE%E3%81%8C%E5%85%AC%E5%B9%B3%E3%81%A7%E3%81%99%0A%20%20%20%20-%20ExecuTorch%20%E3%81%AF%20batch%20size%20%E3%81%94%E3%81%A8%E3%81%AB%20%60.pte%60%20%E3%82%92%E4%BD%9C%E3%82%8A%E7%9B%B4%E3%81%97%E3%81%BE%E3%81%99%EF%BC%88AOT%20%E3%81%A7%20shape%20%E3%82%92%E5%9B%BA%E5%AE%9A%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%EF%BC%89%E3%80%82%0A%20%20%20%20%20%20ONNX%20Runtime%20%E3%81%A8%20OpenVINO%20%E3%81%AF%20batch%20%E6%AC%A1%E5%85%83%E3%82%92%E5%8F%AF%E5%A4%89%E3%81%AB%E3%81%97%E3%81%9F%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E4%BD%BF%E3%81%84%E5%9B%9E%E3%81%97%E3%81%BE%E3%81%99%0A%0A%20%20%20%20%E7%B6%9A%E3%81%8F%204%20%E3%82%BB%E3%83%AB%E3%81%A7%E3%80%81%E6%B8%AC%E5%AE%9A%E7%94%A8%E3%81%AE%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC%E3%80%81%E6%B8%AC%E5%AE%9A%E3%81%AB%E4%BD%BF%E3%81%86%E5%85%A5%E5%8A%9B%E3%80%81GPU%20%E7%94%A8%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%20GPU%20%E3%81%AE%20warm-up%20%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%60measure_ms()%60%20%E3%81%AF%20%60call()%60%20%E3%82%92%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E5%AE%9F%E8%A1%8C%E3%81%97%E3%80%811%20%E5%9B%9E%E3%81%82%E3%81%9F%E3%82%8A%E3%81%AE%E6%89%80%E8%A6%81%E6%99%82%E9%96%93%E3%81%AE%E4%B8%AD%E5%A4%AE%E5%80%A4%20%5Bms%5D%20%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(device)%3A%0A%20%20%20%20def%20synchronize()%3A%0A%20%20%20%20%20%20%20%20if%20device.type%20%3D%3D%20%22cuda%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20torch.cuda.synchronize()%0A%20%20%20%20%20%20%20%20elif%20device.type%20%3D%3D%20%22mps%22%20and%20hasattr(torch%2C%20%22mps%22)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20torch.mps.synchronize()%0A%0A%20%20%20%20def%20measure_ms(call%2C%20repeats%3D30%2C%20warmup%3D5%2C%20min_warmup_s%3D0.3%2C%20target_sample_s%3D0.005%2C%20max_total_s%3D2.5%2C%20settle_s%3D0.1)%3A%0A%20%20%20%20%20%20%20%20time.sleep(settle_s)%0A%20%20%20%20%20%20%20%20warm_start%20%3D%20time.perf_counter()%0A%20%20%20%20%20%20%20%20warm_count%20%3D%200%0A%20%20%20%20%20%20%20%20while%20warm_count%20%3C%20warmup%20or%20time.perf_counter()%20-%20warm_start%20%3C%20min_warmup_s%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20call()%0A%20%20%20%20%20%20%20%20%20%20%20%20warm_count%20%2B%3D%201%0A%20%20%20%20%20%20%20%20average_s%20%3D%20(time.perf_counter()%20-%20warm_start)%20%2F%20warm_count%0A%20%20%20%20%20%20%20%20inner%20%3D%20max(1%2C%20min(200%2C%20int(target_sample_s%20%2F%20max(average_s%2C%201e-9))))%0A%20%20%20%20%20%20%20%20samples%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20loop_start%20%3D%20time.perf_counter()%0A%20%20%20%20%20%20%20%20while%20len(samples)%20%3C%20repeats%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20start%20%3D%20time.perf_counter()%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20_%20in%20range(inner)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20call()%0A%20%20%20%20%20%20%20%20%20%20%20%20samples.append((time.perf_counter()%20-%20start)%20*%201e3%20%2F%20inner)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20len(samples)%20%3E%3D%205%20and%20time.perf_counter()%20-%20loop_start%20%3E%20max_total_s%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20return%20float(np.median(samples))%0A%0A%20%20%20%20return%20measure_ms%2C%20synchronize%0A%0A%0A%40app.cell%0Adef%20_(test_loader)%3A%0A%20%20%20%20bench_batch_sizes%20%3D%20(1%2C%208%2C%2064%2C%20256)%0A%20%20%20%20bench_pool%20%3D%20torch.cat(%5B_images%20for%20_images%2C%20_labels%20in%20test_loader%5D)%5B%3A%20max(bench_batch_sizes)%5D.contiguous()%0A%20%20%20%20print(f%22benchmark%20pool%3A%20%7Btuple(bench_pool.shape)%7D%22)%0A%20%20%20%20return%20bench_batch_sizes%2C%20bench_pool%0A%0A%0A%40app.cell%0Adef%20_(device%2C%20model)%3A%0A%20%20%20%20device_model%20%3D%20copy.deepcopy(model).to(device).eval()%0A%20%20%20%20return%20(device_model%2C)%0A%0A%0A%40app.cell%0Adef%20_(bench_pool%2C%20device%2C%20device_model%2C%20synchronize)%3A%0A%20%20%20%20if%20device.type%20!%3D%20%22cpu%22%3A%0A%20%20%20%20%20%20%20%20_warm_input%20%3D%20bench_pool.to(device)%0A%20%20%20%20%20%20%20%20_warm_start%20%3D%20time.perf_counter()%0A%20%20%20%20%20%20%20%20_warm_iterations%20%3D%200%0A%20%20%20%20%20%20%20%20while%20time.perf_counter()%20-%20_warm_start%20%3C%201.0%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20with%20torch.no_grad()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20device_model(_warm_input)%0A%20%20%20%20%20%20%20%20%20%20%20%20_warm_iterations%20%2B%3D%201%0A%20%20%20%20%20%20%20%20synchronize()%0A%20%20%20%20%20%20%20%20gpu_warmup_note%20%3D%20f%22%7Bdevice.type%7D%20%E3%82%92%20%7B_warm_iterations%7D%20%E5%9B%9E%E7%A9%BA%E5%9B%9E%E3%81%97%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%22%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20gpu_warmup_note%20%3D%20%22GPU%20%E3%81%8C%E7%84%A1%E3%81%84%E3%81%9F%E3%82%81%20warm-up%20%E3%81%AF%E4%B8%8D%E8%A6%81%E3%81%A7%E3%81%99%22%0A%20%20%20%20print(gpu_warmup_note)%0A%20%20%20%20return%20(gpu_warmup_note%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%8C%E6%B8%AC%E5%AE%9A%E3%81%AE%E6%9C%AC%E4%BD%93%E3%81%A7%E3%81%99%E3%80%82batch%20size%20%E3%81%94%E3%81%A8%E3%81%AB%E5%85%A5%E5%8A%9B%E3%82%92%E5%88%87%E3%82%8A%E5%87%BA%E3%81%97%E3%80%81%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%82%8B%20runtime%20%E3%82%92%E9%A0%86%E3%81%AB%E6%B8%AC%E3%81%A3%E3%81%A6%0A%20%20%20%20%60latency_frame%60%20%E3%81%AB%E8%A8%98%E9%8C%B2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60latency_frame%60%20%3D%20%E5%88%97%20%60batch_size%60%E3%83%BB%60runtime%60%E3%83%BB%60latency_ms%60%EF%BC%881%20%E5%9B%9E%E3%81%AE%E6%8E%A8%E8%AB%96%E6%99%82%E9%96%93%E3%81%AE%E4%B8%AD%E5%A4%AE%E5%80%A4%EF%BC%89%E3%83%BB%0A%20%20%20%20%20%20%60per_image_us%60%EF%BC%881%20%E7%94%BB%E5%83%8F%E3%81%82%E3%81%9F%E3%82%8A%E3%81%AB%E6%8F%9B%E7%AE%97%E3%81%97%E3%81%9F%E6%99%82%E9%96%93%EF%BC%89%0A%20%20%20%20-%20GPU%20%E3%81%8C%E7%84%A1%E3%81%84%E7%92%B0%E5%A2%83%E3%81%A7%E3%81%AF%20GPU%20%E3%81%AE%E8%A1%8C%E3%81%8C%E7%8F%BE%E3%82%8C%E3%81%9A%E3%80%81CPU%20%E3%81%AE%20runtime%20%E3%81%A0%E3%81%91%E3%81%8C%E6%AF%94%E8%BC%83%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20bench_batch_sizes%2C%0A%20%20%20%20bench_pool%2C%0A%20%20%20%20build_executorch_method%2C%0A%20%20%20%20compiled_model%2C%0A%20%20%20%20cpu_model%2C%0A%20%20%20%20device%2C%0A%20%20%20%20device_model%2C%0A%20%20%20%20executorch_ready%2C%0A%20%20%20%20gpu_warmup_note%2C%0A%20%20%20%20measure_ms%2C%0A%20%20%20%20ort_cuda_session%2C%0A%20%20%20%20ort_session%2C%0A%20%20%20%20scripted_model%2C%0A%20%20%20%20synchronize%2C%0A)%3A%0A%20%20%20%20print(f%22benchmark%20%E9%96%8B%E5%A7%8B%EF%BC%88%7Bgpu_warmup_note%7D%EF%BC%89%22)%0A%20%20%20%20latency_rows%20%3D%20%5B%5D%0A%20%20%20%20gpu_labels%20%3D%20set()%0A%20%20%20%20for%20_size%20in%20bench_batch_sizes%3A%0A%20%20%20%20%20%20%20%20_batch_cpu%20%3D%20bench_pool%5B%3A_size%5D.contiguous()%0A%20%20%20%20%20%20%20%20_batch_np%20%3D%20_batch_cpu.numpy().astype(np.float32)%0A%20%20%20%20%20%20%20%20_cases%20%3D%20%7B%7D%0A%0A%20%20%20%20%20%20%20%20def%20_eager(_tensor%3D_batch_cpu)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20with%20torch.no_grad()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cpu_model(_tensor)%0A%0A%20%20%20%20%20%20%20%20def%20_script(_tensor%3D_batch_cpu)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20with%20torch.no_grad()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scripted_model(_tensor)%0A%0A%20%20%20%20%20%20%20%20_cases%5B%22PyTorch%20eager%20(CPU)%22%5D%20%3D%20_eager%0A%20%20%20%20%20%20%20%20_cases%5B%22TorchScript%20(CPU)%22%5D%20%3D%20_script%0A%20%20%20%20%20%20%20%20if%20ort_session%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_input_name%20%3D%20ort_session.get_inputs()%5B0%5D.name%0A%20%20%20%20%20%20%20%20%20%20%20%20_cases%5B%22ONNX%20Runtime%20(CPU)%22%5D%20%3D%20lambda%20_values%3D_batch_np%2C%20_name%3D_input_name%3A%20ort_session.run(None%2C%20%7B_name%3A%20_values%7D)%0A%20%20%20%20%20%20%20%20if%20compiled_model%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_cases%5B%22OpenVINO%20(CPU)%22%5D%20%3D%20lambda%20_values%3D_batch_np%3A%20compiled_model(%5B_values%5D)%5Bcompiled_model.output(0)%5D%0A%20%20%20%20%20%20%20%20if%20executorch_ready%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_method%2C%20_path%2C%20_%20%3D%20build_executorch_method(cpu_model%2C%20_batch_cpu)%0A%20%20%20%20%20%20%20%20%20%20%20%20_cases%5B%22ExecuTorch%20XNNPACK%20(CPU)%22%5D%20%3D%20lambda%20_tensor%3D_batch_cpu%2C%20_runner%3D_method%3A%20_runner.execute(%5B_tensor%5D)%0A%20%20%20%20%20%20%20%20if%20ort_cuda_session%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_cuda_input_name%20%3D%20ort_cuda_session.get_inputs()%5B0%5D.name%0A%20%20%20%20%20%20%20%20%20%20%20%20_cases%5B%22ONNX%20Runtime%20(CUDA)%20%E8%BB%A2%E9%80%81%E8%BE%BC%E3%81%BF%22%5D%20%3D%20lambda%20_values%3D_batch_np%2C%20_name%3D_cuda_input_name%3A%20ort_cuda_session.run(None%2C%20%7B_name%3A%20_values%7D)%0A%20%20%20%20%20%20%20%20%20%20%20%20gpu_labels.add(%22ONNX%20Runtime%20(CUDA)%20%E8%BB%A2%E9%80%81%E8%BE%BC%E3%81%BF%22)%0A%20%20%20%20%20%20%20%20if%20device.type%20!%3D%20%22cpu%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_batch_device%20%3D%20_batch_cpu.to(device)%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20def%20_gpu_compute(_tensor%3D_batch_device)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20with%20torch.no_grad()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20device_model(_tensor)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20synchronize()%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20def%20_gpu_end_to_end(_tensor%3D_batch_cpu)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20with%20torch.no_grad()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20device_model(_tensor.to(device)).cpu()%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20synchronize()%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20_cases%5Bf%22PyTorch%20(%7Bdevice.type%7D)%20%E8%A8%88%E7%AE%97%E3%81%AE%E3%81%BF%22%5D%20%3D%20_gpu_compute%0A%20%20%20%20%20%20%20%20%20%20%20%20_cases%5Bf%22PyTorch%20(%7Bdevice.type%7D)%20%E8%BB%A2%E9%80%81%E8%BE%BC%E3%81%BF%22%5D%20%3D%20_gpu_end_to_end%0A%20%20%20%20%20%20%20%20%20%20%20%20gpu_labels.update(%7Bf%22PyTorch%20(%7Bdevice.type%7D)%20%E8%A8%88%E7%AE%97%E3%81%AE%E3%81%BF%22%2C%20f%22PyTorch%20(%7Bdevice.type%7D)%20%E8%BB%A2%E9%80%81%E8%BE%BC%E3%81%BF%22%7D)%0A%20%20%20%20%20%20%20%20_measure_order%20%3D%20sorted(_cases%2C%20key%3Dlambda%20_name%3A%200%20if%20_name%20in%20gpu_labels%20else%201)%0A%20%20%20%20%20%20%20%20_measured%20%3D%20%7B_label%3A%20measure_ms(_cases%5B_label%5D)%20for%20_label%20in%20_measure_order%7D%0A%20%20%20%20%20%20%20%20for%20_label%20in%20_cases%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_median_ms%20%3D%20_measured%5B_label%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20latency_rows.append(%7B%22batch_size%22%3A%20_size%2C%20%22runtime%22%3A%20_label%2C%20%22latency_ms%22%3A%20_median_ms%2C%20%22per_image_us%22%3A%20_median_ms%20%2F%20_size%20*%201e3%7D)%0A%20%20%20%20latency_frame%20%3D%20pd.DataFrame(latency_rows)%0A%20%20%20%20return%20(latency_frame%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E6%B8%AC%E5%AE%9A%E7%B5%90%E6%9E%9C%0A%0A%20%20%20%20%E4%B8%8A%E3%81%AE%E8%A1%A8%E3%81%8C%201%20%E5%9B%9E%E3%81%AE%E6%8E%A8%E8%AB%96%E3%81%AB%E3%81%8B%E3%81%8B%E3%82%8B%E6%99%82%E9%96%93%20%5Bms%5D%E3%80%81%E4%B8%8B%E3%81%AE%E8%A1%A8%E3%81%8C%201%20%E7%94%BB%E5%83%8F%E3%81%82%E3%81%9F%E3%82%8A%E3%81%AB%E6%8F%9B%E7%AE%97%E3%81%97%E3%81%9F%E6%99%82%E9%96%93%20%5B%C2%B5s%5D%20%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E8%A1%8C%E3%81%8C%20runtime%E3%80%81%E5%88%97%20%60batch%3DN%60%20%E3%81%8C%20batch%20size%20%E3%81%A7%E3%81%99%E3%80%82%60batch%3D64%60%20%E3%81%AA%E3%82%89%E3%80%8164%20%E6%9E%9A%E3%82%92%201%20%E5%9B%9E%E3%81%AE%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%81%A7%0A%20%20%20%20%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E6%8E%A8%E8%AB%96%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E6%99%82%E9%96%93%E3%82%92%E8%A1%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(latency_frame)%3A%0A%20%20%20%20runtime_order%20%3D%20list(dict.fromkeys(latency_frame%5B%22runtime%22%5D))%0A%0A%20%20%20%20def%20pivot_by_batch(values%2C%20digits)%3A%0A%20%20%20%20%20%20%20%20table%20%3D%20latency_frame.pivot(index%3D%22runtime%22%2C%20columns%3D%22batch_size%22%2C%20values%3Dvalues).reindex(runtime_order).round(digits)%0A%20%20%20%20%20%20%20%20table.columns%20%3D%20%5Bf%22batch%3D%7B_size%7D%22%20for%20_size%20in%20table.columns%5D%0A%20%20%20%20%20%20%20%20return%20table.rename_axis(index%3D%22runtime%22%2C%20columns%3DNone).reset_index()%0A%0A%20%20%20%20latency_pivot%20%3D%20pivot_by_batch(%22latency_ms%22%2C%203)%0A%20%20%20%20per_image_pivot%20%3D%20pivot_by_batch(%22per_image_us%22%2C%201)%0A%20%20%20%20mo.vstack(%5Bmo.md(%22**1%20%E5%9B%9E%E3%81%AE%E6%8E%A8%E8%AB%96%E6%99%82%E9%96%93%20%5Bms%5D**%22)%2C%20latency_pivot%2C%20mo.md(%22**1%20%E7%94%BB%E5%83%8F%E3%81%82%E3%81%9F%E3%82%8A%20%5B%C2%B5s%5D**%22)%2C%20per_image_pivot%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(latency_frame)%3A%0A%20%20%20%20_fig%2C%20_axes%20%3D%20plt.subplots(1%2C%202%2C%20figsize%3D(11%2C%204))%0A%20%20%20%20for%20_name%2C%20_group%20in%20latency_frame.groupby(%22runtime%22)%3A%0A%20%20%20%20%20%20%20%20_sorted%20%3D%20_group.sort_values(%22batch_size%22)%0A%20%20%20%20%20%20%20%20_axes%5B0%5D.plot(_sorted%5B%22batch_size%22%5D%2C%20_sorted%5B%22latency_ms%22%5D%2C%20marker%3D%22o%22%2C%20label%3D_name)%0A%20%20%20%20%20%20%20%20_axes%5B1%5D.plot(_sorted%5B%22batch_size%22%5D%2C%20_sorted%5B%22per_image_us%22%5D%2C%20marker%3D%22o%22%2C%20label%3D_name)%0A%20%20%20%20for%20_axis%2C%20_title%2C%20_ylabel%20in%20((_axes%5B0%5D%2C%20%22Latency%20per%20call%22%2C%20%22ms%22)%2C%20(_axes%5B1%5D%2C%20%22Latency%20per%20image%22%2C%20%22us%22))%3A%0A%20%20%20%20%20%20%20%20_axis.set_xscale(%22log%22%2C%20base%3D2)%0A%20%20%20%20%20%20%20%20_axis.set_yscale(%22log%22)%0A%20%20%20%20%20%20%20%20_axis.set_xlabel(%22batch%20size%22)%0A%20%20%20%20%20%20%20%20_axis.set_ylabel(_ylabel)%0A%20%20%20%20%20%20%20%20_axis.set_title(_title)%0A%20%20%20%20%20%20%20%20_axis.grid(True%2C%20which%3D%22both%22%2C%20alpha%3D0.3)%0A%20%20%20%20_axes%5B1%5D.legend(fontsize%3D8%2C%20loc%3D%22center%20left%22%2C%20bbox_to_anchor%3D(1.02%2C%200.5))%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20backend%20%E3%82%92%E5%A4%96%E3%81%99%E3%81%A8%E3%81%A9%E3%81%86%E3%81%AA%E3%82%8B%E3%81%8B%EF%BC%88ExecuTorch%EF%BC%89%0A%0A%20%20%20%20ExecuTorch%20%E3%81%AE%E9%80%9F%E5%BA%A6%E3%81%AF%20delegate%20%E3%81%99%E3%82%8B%20backend%20%E3%81%AB%E5%BC%B7%E3%81%8F%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%60partition%3DFalse%60%20%E3%81%A7%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%0A%20%20%20%20%E3%81%A9%E3%81%AE%E7%92%B0%E5%A2%83%E3%81%A7%E3%82%82%E5%8B%95%E3%81%8F%E3%81%93%E3%81%A8%E3%82%92%E5%84%AA%E5%85%88%E3%81%97%E3%81%9F%E5%8F%82%E7%85%A7%E5%AE%9F%E8%A3%85%EF%BC%88portable%20kernels%EF%BC%89%E3%81%A0%E3%81%91%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E5%90%8C%E3%81%98%20%60.pte%60%20%E5%BD%A2%E5%BC%8F%E3%83%BB%0A%20%20%20%20%E5%90%8C%E3%81%98%E9%87%8D%E3%81%BF%E3%81%A7%E3%82%82%E3%80%81XNNPACK%20%E3%81%B8%20delegate%20%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%A8%E6%A1%81%E9%81%95%E3%81%84%E3%81%AE%E5%B7%AE%E3%81%8C%E5%87%BA%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%85%A5%E5%8A%9B%EF%BC%9A%60cpu_model%60%E3%80%81%60cpu_input%60%EF%BC%888%20%E6%9E%9A%EF%BC%89%0A%20%20%20%20-%20%E5%87%A6%E7%90%86%EF%BC%9A%60partition%3DFalse%60%20%E3%81%A7%20%60.pte%60%20%E3%82%92%E4%BD%9C%E3%82%8A%E3%80%815%20%E5%9B%9E%E6%B8%AC%E3%81%A3%E3%81%A6%E4%B8%AD%E5%A4%AE%E5%80%A4%E3%82%92%E6%8E%A1%E3%82%8A%E3%81%BE%E3%81%99%EF%BC%88%E9%9D%9E%E5%B8%B8%E3%81%AB%E9%81%85%E3%81%84%E3%81%9F%E3%82%81%E5%9B%9E%E6%95%B0%E3%82%92%0A%20%20%20%20%20%20%E6%B8%9B%E3%82%89%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%EF%BC%89%0A%20%20%20%20-%20%E5%87%BA%E5%8A%9B%EF%BC%9A%60backend_frame%60%20%3D%20backend%20%E3%81%94%E3%81%A8%E3%81%AE%E6%8E%A8%E8%AB%96%E6%99%82%E9%96%93%E3%81%A8%E3%80%81XNNPACK%20%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E5%80%8D%E7%8E%87%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20build_executorch_method%2C%0A%20%20%20%20cpu_input%2C%0A%20%20%20%20cpu_model%2C%0A%20%20%20%20executorch_ready%2C%0A%20%20%20%20latency_frame%2C%0A%20%20%20%20measure_ms%2C%0A)%3A%0A%20%20%20%20backend_frame%20%3D%20pd.DataFrame(%7B%22note%22%3A%20%5B%22executorch%20%E3%81%8C%E7%84%A1%E3%81%84%E3%81%9F%E3%82%81%E6%B8%AC%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%22%5D%7D)%0A%20%20%20%20if%20executorch_ready%3A%0A%20%20%20%20%20%20%20%20_method%2C%20_path%2C%20_setup_ms%20%3D%20build_executorch_method(cpu_model%2C%20cpu_input%2C%20partition%3DFalse%2C%20tag%3D%22portable%22)%0A%20%20%20%20%20%20%20%20_portable_ms%20%3D%20measure_ms(lambda%3A%20_method.execute(%5Bcpu_input%5D)%2C%20repeats%3D5%2C%20warmup%3D2)%0A%20%20%20%20%20%20%20%20_matched%20%3D%20latency_frame%5B(latency_frame%5B%22batch_size%22%5D%20%3D%3D%208)%20%26%20(latency_frame%5B%22runtime%22%5D%20%3D%3D%20%22ExecuTorch%20XNNPACK%20(CPU)%22)%5D%0A%20%20%20%20%20%20%20%20_xnnpack_ms%20%3D%20float(_matched%5B%22latency_ms%22%5D.iloc%5B0%5D)%0A%20%20%20%20%20%20%20%20backend_frame%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%22backend%22%3A%20%22XNNPACK%20delegate%22%2C%20%22latency_ms%22%3A%20round(_xnnpack_ms%2C%203)%2C%20%22XNNPACK%20%E6%AF%94%22%3A%201.0%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%22backend%22%3A%20%22portable%20kernels%22%2C%20%22latency_ms%22%3A%20round(_portable_ms%2C%203)%2C%20%22XNNPACK%20%E6%AF%94%22%3A%20round(_portable_ms%20%2F%20_xnnpack_ms%2C%201)%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20backend_frame%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E4%B8%80%E5%BA%A6%E3%81%8D%E3%82%8A%E3%81%AE%E3%82%B3%E3%82%B9%E3%83%88%0A%0A%20%20%20%20%E6%8E%A8%E8%AB%96%E6%99%82%E9%96%93%E3%81%AE%E6%AF%94%E8%BC%83%E3%81%AB%E3%81%AF%E7%8F%BE%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8C%E3%80%81%E5%A4%89%E6%8F%9B%E3%83%BB%E6%9C%80%E9%81%A9%E5%8C%96%E3%83%BB%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%81%AB%E3%81%8B%E3%81%8B%E3%82%8B%E6%99%82%E9%96%93%E3%82%82%E9%85%8D%E7%BD%AE%E5%85%88%E3%82%92%E9%81%B8%E3%81%B6%E6%9D%90%E6%96%99%E3%81%AB%0A%20%20%20%20%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%93%E3%81%BE%E3%81%A7%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E6%B8%AC%E3%81%A3%E3%81%9F%E6%89%80%E8%A6%81%E6%99%82%E9%96%93%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%BE%E3%81%99%E3%80%82TorchScript%20%E3%81%AF%E4%BF%9D%E5%AD%98%E3%81%A8%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81ONNX%20%E3%81%AF%0A%20%20%20%20export%20%E3%81%A8%20session%20%E4%BD%9C%E6%88%90%E3%80%81ExecuTorch%20%E3%81%AF%20%60.pte%60%20%E3%81%AE%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%81%A8%20method%20%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%A7%E3%82%92%E5%90%AB%E3%81%BF%E3%80%81%E3%81%84%E3%81%9A%E3%82%8C%E3%82%82%0A%20%20%20%20%E3%80%8C%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%82%8B%E7%8A%B6%E6%85%8B%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%BE%E3%81%A7%E3%80%8D%E3%82%92%E6%B8%AC%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82OpenVINO%20%E3%81%A8%20ONNX%20Runtime%20%E3%81%AE%20CUDA%20session%20%E3%81%A0%E3%81%91%E3%81%AF%0A%20%20%20%20%E5%89%8D%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%81%9F%20ONNX%20%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%A8%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81ONNX%20export%20%E3%81%AE%E6%99%82%E9%96%93%E3%81%AF%E5%90%AB%E3%81%BF%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82ExecuTorch%20%E3%81%AF%0A%20%20%20%20batch%20size%20%E3%81%94%E3%81%A8%E3%81%AB%E3%81%93%E3%81%AE%E6%99%82%E9%96%93%E3%82%92%0A%20%20%20%20%E6%89%95%E3%81%86%E7%82%B9%E3%81%A8%E3%80%81%E3%81%93%E3%81%AE%E8%A1%A8%E3%81%AE%E5%80%A4%E3%81%AB%E3%81%AF%E5%88%9D%E5%9B%9E%E3%81%A0%E3%81%91%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B%20module%20%E3%81%AE%20import%20%E6%99%82%E9%96%93%E3%82%82%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E7%82%B9%E3%81%AB%E6%B3%A8%E6%84%8F%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20executorch_setup_ms%2C%0A%20%20%20%20onnx_cuda_setup_ms%2C%0A%20%20%20%20onnx_setup_ms%2C%0A%20%20%20%20openvino_device%2C%0A%20%20%20%20openvino_setup_ms%2C%0A%20%20%20%20torchscript_setup_ms%2C%0A)%3A%0A%20%20%20%20setup_frame%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22step%22%3A%20%22TorchScript%20script%20%2B%20save%20%2B%20load%22%2C%20%22milliseconds%22%3A%20round(torchscript_setup_ms%2C%201)%2C%20%22%E5%82%99%E8%80%83%22%3A%20%22shape%20%E9%9D%9E%E4%BE%9D%E5%AD%98%22%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22step%22%3A%20%22ONNX%20export%20%2B%20checker%20%2B%20CPU%20session%22%2C%20%22milliseconds%22%3A%20round(onnx_setup_ms%2C%201)%2C%20%22%E5%82%99%E8%80%83%22%3A%20%22batch%20%E5%8F%AF%E5%A4%89%22%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22step%22%3A%20%22ONNX%20Runtime%20CUDA%20session%22%2C%20%22milliseconds%22%3A%20round(onnx_cuda_setup_ms%2C%201)%2C%20%22%E5%82%99%E8%80%83%22%3A%20%22export%20%E6%B8%88%E3%81%BF%20ONNX%20%E3%81%8B%E3%82%89%22%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22step%22%3A%20%22OpenVINO%20convert%20%2B%20compile%22%2C%20%22milliseconds%22%3A%20round(openvino_setup_ms%2C%201)%2C%20%22%E5%82%99%E8%80%83%22%3A%20f%22device%3D%7Bopenvino_device%7D%22%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%22step%22%3A%20%22ExecuTorch%20export%20%2B%20lower%20(batch%3D8)%22%2C%20%22milliseconds%22%3A%20round(executorch_setup_ms%2C%201)%2C%20%22%E5%82%99%E8%80%83%22%3A%20%22shape%20%E3%81%94%E3%81%A8%E3%81%AB%E5%BF%85%E8%A6%81%22%7D%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20setup_frame%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%81%AA%E3%81%9C%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%A7%E5%B7%AE%E3%81%8C%E5%87%BA%E3%82%8B%E3%81%AE%E3%81%8B%0A%0A%20%20%20%20%E6%B8%AC%E5%AE%9A%E7%B5%90%E6%9E%9C%E3%81%AE%E5%82%BE%E5%90%91%E3%81%A8%E3%80%81%E3%81%9D%E3%81%AE%E7%90%86%E7%94%B1%E3%82%92%E6%95%B4%E7%90%86%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%95%B0%E5%80%A4%E3%81%AF%E4%B8%8A%E3%81%AE%E8%A1%A8%E3%82%92%E5%8F%82%E7%85%A7%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%0A%20%20%20%20%23%23%23%20batch%20size%20%E3%81%8C%E5%B0%8F%E3%81%95%E3%81%84%E3%81%A8%20GPU%20%E3%81%AF%E9%80%9F%E3%81%8F%E3%81%AA%E3%82%89%E3%81%AA%E3%81%84%0A%0A%20%20%20%20batch%20size%20%E3%81%8C%201%20%E3%81%AE%E3%81%A8%E3%81%8D%E3%80%81GPU%20%E3%81%AE%E6%8E%A8%E8%AB%96%E6%99%82%E9%96%93%E3%81%AF%20CPU%20%E3%81%AE%20runtime%20%E3%81%A8%E5%90%8C%E7%A8%8B%E5%BA%A6%E3%81%8B%E3%82%80%E3%81%97%E3%82%8D%E9%81%85%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%0A%20%20%20%20%E9%A0%98%E5%9F%9F%E3%81%A7%E3%81%AF%E5%AE%9F%E9%9A%9B%E3%81%AE%E8%A8%88%E7%AE%97%E3%82%88%E3%82%8A%E3%82%82%E3%80%81**%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E8%B5%B7%E5%8B%95%EF%BC%88%E6%95%B0%E5%8D%81%20%C2%B5s%20%C3%97%20%E5%B1%A4%E6%95%B0%EF%BC%89%E3%81%A8%20PCIe%20%E7%B5%8C%E7%94%B1%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E8%BB%A2%E9%80%81**%E3%81%A8%E3%81%84%E3%81%86%0A%20%20%20%20%E5%9B%BA%E5%AE%9A%E8%B2%BB%E3%81%8C%E6%94%AF%E9%85%8D%E7%9A%84%E3%81%A0%E3%81%8B%E3%82%89%E3%81%A7%E3%81%99%E3%80%82batch%20size%20%E3%82%92%E5%A2%97%E3%82%84%E3%81%99%E3%81%A8%E3%80%81%E3%81%93%E3%81%AE%E5%9B%BA%E5%AE%9A%E8%B2%BB%E3%81%8C%E5%A4%9A%E6%95%B0%E3%81%AE%E7%94%BB%E5%83%8F%E3%81%A7%E8%96%84%E3%81%BE%E3%82%8A%E3%80%81%E3%81%8B%E3%81%A4%E6%95%B0%E5%8D%83%E3%81%AE%0A%20%20%20%20%E6%BC%94%E7%AE%97%E5%99%A8%E3%82%92%E5%90%8C%E6%99%82%E3%81%AB%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%80%811%20%E7%94%BB%E5%83%8F%E3%81%82%E3%81%9F%E3%82%8A%E3%81%AE%E6%99%82%E9%96%93%E3%81%8C%E6%80%A5%E6%BF%80%E3%81%AB%E4%B8%8B%E3%81%8C%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%80%8C%E8%BB%A2%E9%80%81%E8%BE%BC%E3%81%BF%E3%80%8D%E3%81%AF%0A%20%20%20%20host%20%E3%81%8B%E3%82%89%20device%20%E3%81%B8%E3%81%AE%E8%BB%A2%E9%80%81%E3%83%BB%E7%B5%90%E6%9E%9C%E3%81%AE%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%97%E3%83%BB%E5%90%8C%E6%9C%9F%E3%81%BE%E3%81%A7%E5%90%AB%E3%82%81%E3%81%9F%E5%AE%9F%E9%81%8B%E7%94%A8%E3%81%AB%E8%BF%91%E3%81%84%E5%80%A4%E3%81%A7%E3%80%81%E3%80%8C%E8%A8%88%E7%AE%97%E3%81%AE%E3%81%BF%E3%80%8D%E3%81%A8%E3%81%AE%E5%B7%AE%E3%81%AF%0A%20%20%20%201%20ms%20%E6%9C%AA%E6%BA%80%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%E5%B7%AE%E3%81%AF%E6%B8%AC%E5%AE%9A%E3%81%94%E3%81%A8%E3%81%AE%E3%81%B0%E3%82%89%E3%81%A4%E3%81%8D%E3%81%A8%E5%90%8C%E7%A8%8B%E5%BA%A6%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81batch%20size%20%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E5%82%BE%E5%90%91%E3%81%A8%E3%81%97%E3%81%A6%0A%20%20%20%20%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%0A%20%20%20%20%23%23%23%20%E6%8E%A8%E8%AB%96%E5%B0%82%E7%94%A8%20runtime%20%E3%81%AF%E5%A4%A7%E3%81%8D%E3%81%84%20batch%20%E3%81%A7%E5%8A%B9%E3%81%8F%0A%0A%20%20%20%20ONNX%20Runtime%E3%83%BBOpenVINO%E3%83%BBExecuTorch(XNNPACK)%20%E3%81%AF%E3%80%81%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%93%E3%81%A0%E6%99%82%E7%82%B9%E3%81%A7%E3%82%B0%E3%83%A9%E3%83%95%E5%85%A8%E4%BD%93%E3%82%92%E6%9C%80%E9%81%A9%E5%8C%96%0A%20%20%20%20%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E5%AE%9A%E6%95%B0%E3%81%AE%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%A8%E3%80%81Conv%20%E3%81%A8%20ReLU%20%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E9%80%A3%E7%B6%9A%E3%81%99%E3%82%8B%E6%BC%94%E7%AE%97%E3%81%AE%E8%9E%8D%E5%90%88%E3%81%AB%E3%82%88%E3%82%8A%E3%80%81%E4%B8%AD%E9%96%93%20tensor%20%E3%81%AE%E6%9B%B8%E3%81%8D%E6%88%BB%E3%81%97%E3%81%8C%E6%B8%9B%E3%82%8A%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%AB%E9%81%A9%E3%81%97%E3%81%9F%E3%83%A1%E3%83%A2%E3%83%AA%E9%85%8D%E7%BD%AE%E3%81%B8%E3%81%82%E3%82%89%E3%81%8B%E3%81%98%E3%82%81%E5%A4%89%E6%8F%9B%E3%81%97%E3%80%81%E9%87%8D%E3%81%BF%E3%82%82%E4%B8%A6%E3%81%B9%E6%9B%BF%E3%81%88%E3%81%A6%E3%81%8A%E3%81%91%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E5%AE%9F%E8%A1%8C%E6%99%82%E3%81%AB%E7%A2%BA%E4%BF%9D%E3%81%99%E3%82%8B%E3%83%A1%E3%83%A2%E3%83%AA%E3%81%AE%E8%A8%88%E7%94%BB%E3%82%92%E4%BA%8B%E5%89%8D%E3%81%AB%E7%AB%8B%E3%81%A6%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%0A%0A%20%20%20%20%E4%B8%80%E6%96%B9%20PyTorch%20eager%20%E3%81%AF%E3%80%81%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%81%AE%E3%81%9F%E3%81%B3%E3%81%AB%20Python%20%E3%81%8B%E3%82%89%201%20%E6%BC%94%E7%AE%97%E3%81%9A%E3%81%A4%20dispatch%20%E3%81%97%E3%80%81%E4%B8%AD%E9%96%93%20tensor%20%E3%82%92%E9%83%BD%E5%BA%A6%0A%20%20%20%20%E7%A2%BA%E4%BF%9D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%9F%94%E8%BB%9F%E3%81%95%E3%81%A8%E5%BC%95%E3%81%8D%E6%8F%9B%E3%81%88%E3%81%AE%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%98%E3%83%83%E3%83%89%E3%81%A7%E3%80%81%E8%A8%88%E7%AE%97%E9%87%8F%E3%81%8C%E5%A2%97%E3%81%88%E3%82%8B%E5%A4%A7%E3%81%8D%E3%81%84%20batch%20%E3%81%A7%E3%81%AF%E6%8E%A8%E8%AB%96%E5%B0%82%E7%94%A8%20runtime%20%E3%81%8C%0A%20%20%20%20eager%20%E3%81%AE%E6%95%B0%E5%80%8D%E9%80%9F%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%EF%BC%88%E6%AD%A3%E7%A2%BA%E3%81%AA%E5%80%8D%E7%8E%87%E3%81%AF%E6%B8%AC%E5%AE%9A%E3%81%AE%E3%81%9F%E3%81%B3%E3%81%AB%E5%A4%89%E3%82%8F%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E4%B8%8A%E3%81%AE%E8%A1%A8%E3%81%AE%E5%80%A4%E3%82%92%E5%8F%82%E7%85%A7%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%EF%BC%89%E3%80%82%0A%0A%20%20%20%20%E3%81%9F%E3%81%A0%E3%81%97**%E5%B0%8F%E3%81%95%E3%81%84%20batch%20%E3%81%A7%E3%81%AF%E9%80%86%E8%BB%A2%E3%81%97%E3%81%86%E3%82%8B**%E7%82%B9%E3%81%AB%E6%B3%A8%E6%84%8F%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%E4%B8%8A%E3%81%AE%E8%A1%A8%E3%81%AE%20batch%20size%201%20%E3%81%AE%E8%A1%8C%E3%81%8C%E7%A4%BA%E3%81%99%E3%81%A8%0A%20%20%20%20%E3%81%8A%E3%82%8A%E3%80%81%E6%8E%A8%E8%AB%96%E5%B0%82%E7%94%A8%20runtime%20%E3%81%8C%E5%BF%85%E3%81%9A%20eager%20%E3%82%88%E3%82%8A%E9%80%9F%E3%81%84%E3%82%8F%E3%81%91%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%80%81%E3%81%93%E3%81%AE%E7%92%B0%E5%A2%83%E3%81%A7%E3%81%AF%20ExecuTorch%20%E3%81%8C%20eager%20%E3%82%88%E3%82%8A%0A%20%20%20%20%E9%81%85%E3%81%8F%E6%B8%AC%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%821%20%E5%9B%9E%E3%81%AE%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%81%82%E3%81%9F%E3%82%8A%E3%81%AE%E5%9B%BA%E5%AE%9A%E8%B2%BB%EF%BC%88%E5%85%A5%E5%8A%9B%E3%81%AE%E5%8F%97%E3%81%91%E6%B8%A1%E3%81%97%E3%80%81%0A%20%20%20%20%E5%8B%95%E7%9A%84%20shape%20%E3%81%AE%E8%A7%A3%E6%B1%BA%E3%80%81%E8%87%AA%E5%89%8D%E3%81%AE%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%83%97%E3%83%BC%E3%83%AB%E3%81%B8%E3%81%AE%E4%BB%95%E4%BA%8B%E3%81%AE%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%EF%BC%89%E3%81%8C%E3%80%81%E5%AE%9F%E9%9A%9B%E3%81%AE%E8%A8%88%E7%AE%97%E3%82%88%E3%82%8A%E5%A4%A7%E3%81%8D%E3%81%8F%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E5%90%8C%E3%81%98%E7%90%86%E7%94%B1%E3%81%A7%E3%80%81%E3%81%A9%E3%81%AE%20runtime%20%E3%81%8C%E6%9C%80%E9%80%9F%E3%81%8B%E3%81%AF%20batch%20size%20%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E5%85%A5%E3%82%8C%E6%9B%BF%E3%82%8F%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%23%23%23%20%E5%90%8C%E3%81%98%20ONNX%20%E3%81%A7%E3%82%82%E5%AE%9F%E8%A1%8C%E5%85%88%E3%81%A7%E9%80%9F%E5%BA%A6%E3%82%82%E6%95%B0%E5%80%A4%E3%82%82%E5%A4%89%E3%82%8F%E3%82%8B%0A%0A%20%20%20%20ONNX%20Runtime%20%E3%81%AF%E5%90%8C%E3%81%98%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%BB%E5%90%8C%E3%81%98%E9%87%8D%E3%81%BF%E3%81%AE%E3%81%BE%E3%81%BE%20EP%20%E3%82%92%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%88%E3%82%8B%E3%81%A0%E3%81%91%E3%81%A7%E5%AE%9F%E8%A1%8C%E5%85%88%E3%82%92%E5%A4%89%E3%81%88%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E4%B8%8A%E3%81%AE%E8%A1%A8%E3%81%AE%20%60ONNX%20Runtime%20(CPU)%60%20%E3%81%A8%20%60ONNX%20Runtime%20(CUDA)%20%E8%BB%A2%E9%80%81%E8%BE%BC%E3%81%BF%60%20%E3%81%AF%E3%80%81**%E3%83%A2%E3%83%87%E3%83%AB%E4%BB%A5%E5%A4%96%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%82%92%0A%20%20%20%20%E6%8F%83%E3%81%88%E3%81%9F%E3%81%86%E3%81%88%E3%81%A7%20CPU%20%E3%81%A8%20GPU%20%E3%82%92%E6%AF%94%E3%81%B9%E3%81%9F%E5%80%A4**%E3%81%A7%E3%81%99%E3%80%82CUDA%20EP%20%E3%81%AF%20host%20%E3%81%A8%E3%81%AE%E8%BB%A2%E9%80%81%E3%82%92%E6%AF%8E%E5%9B%9E%E5%90%AB%E3%82%80%E3%81%9F%E3%82%81%E3%80%81%E5%B0%8F%E3%81%95%E3%81%84%0A%20%20%20%20batch%20%E3%81%A7%E3%81%AF%20CPU%20EP%20%E3%81%AB%E5%8B%9D%E3%81%A6%E3%81%9A%E3%80%81batch%20%E3%82%92%E5%A4%A7%E3%81%8D%E3%81%8F%E3%81%99%E3%82%8B%E3%81%BB%E3%81%A9%E6%9C%89%E5%88%A9%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%A4%89%E3%82%8F%E3%82%8B%E3%81%AE%E3%81%AF%E9%80%9F%E5%BA%A6%E3%81%A0%E3%81%91%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82CUDA%20EP%20%E3%81%AF%E6%97%A2%E5%AE%9A%E3%81%A7%20TF32%20%E3%82%92%E4%BD%BF%E3%81%86%E3%81%9F%E3%82%81%E3%80%81%E5%87%BA%E5%8A%9B%E3%81%AE%E4%B8%80%E8%87%B4%E8%A1%A8%E3%81%A7%E8%A6%8B%E3%81%9F%E3%81%A8%E3%81%8A%E3%82%8A%0A%20%20%20%20CPU%20EP%20%E3%82%88%E3%82%8A%201%20%E6%A1%81%E4%BB%A5%E4%B8%8A%E5%A4%A7%E3%81%8D%E3%81%84%E5%B7%AE%E3%81%8C%E5%87%BA%E3%81%BE%E3%81%99%E3%80%82%E4%BA%88%E6%B8%AC%E3%83%A9%E3%83%99%E3%83%AB%E3%81%AF%E5%A4%89%E3%82%8F%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%81%A7%E3%81%97%E3%81%9F%E3%81%8C%E3%80%81**%E5%AE%9F%E8%A1%8C%E5%85%88%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B%E3%81%A8%0A%20%20%20%20%E6%95%B0%E5%80%A4%E3%82%82%E5%A4%89%E3%82%8F%E3%82%8A%E3%81%86%E3%82%8B**%E3%81%93%E3%81%A8%E3%81%AF%E3%80%81%E5%9B%9E%E5%B8%B0%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E8%A8%B1%E5%AE%B9%E8%AA%A4%E5%B7%AE%E3%82%92%E6%B1%BA%E3%82%81%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AB%E5%8A%B9%E3%81%84%E3%81%A6%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%AA%E3%81%8A%20GPU%20%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%81%AF%20runtime%20%E3%81%AB%E4%BE%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99%E3%80%82OpenVINO%20%E3%81%AE%20GPU%20%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AF%20Intel%20%E8%A3%BD%20GPU%0A%20%20%20%20%E5%B0%82%E7%94%A8%E3%81%A7%E3%80%81%E3%81%93%E3%81%AE%E7%92%B0%E5%A2%83%E3%81%AE%20NVIDIA%20GPU%20%E3%81%AF%E5%AF%BE%E8%B1%A1%E5%A4%96%E3%81%A7%E3%81%99%E3%80%82ExecuTorch%20%E3%81%AE%20XNNPACK%20backend%20%E3%82%82%20CPU%20%E5%B0%82%E7%94%A8%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E3%80%8CGPU%20%E5%AF%BE%E5%BF%9C%E3%80%8D%E3%81%A8%E8%A8%80%E3%81%86%E3%81%A8%E3%81%8D%E3%81%AF%E3%80%81**%E3%81%A9%E3%81%AE%20runtime%20%E3%81%AE%E3%81%A9%E3%81%AE%20backend%20%E3%81%8C%E3%80%81%E3%81%A9%E3%81%AE%E3%83%99%E3%83%B3%E3%83%80%E3%81%AE%20GPU%20%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E3%81%8B**%E3%81%BE%E3%81%A7%0A%20%20%20%20%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%23%23%23%20TorchScript%20%E3%81%AF%20eager%20%E3%81%A8%E3%81%BB%E3%81%A8%E3%82%93%E3%81%A9%E5%A4%89%E3%82%8F%E3%82%89%E3%81%AA%E3%81%84%0A%0A%20%20%20%20TorchScript%20%E3%81%AF%20Python%20%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%97%E3%83%AA%E3%82%BF%E3%82%92%E4%BB%8B%E3%81%95%E3%81%9A%E3%81%AB%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%81%AF%20eager%20%E3%81%A8%E5%90%8C%E3%81%98%0A%20%20%20%20ATen%20%E5%AE%9F%E8%A3%85%E3%81%A7%E3%81%99%E3%80%82%E3%81%97%E3%81%9F%E3%81%8C%E3%81%A3%E3%81%A6%E5%B7%AE%E3%81%8C%E5%87%BA%E3%82%8B%E3%81%AE%E3%81%AF%E3%80%81Python%20%E5%81%B4%E3%81%AE%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%98%E3%83%83%E3%83%89%E3%81%8C%E7%9B%B8%E5%AF%BE%E7%9A%84%E3%81%AB%E5%A4%A7%E3%81%8D%E3%81%84%E5%B0%8F%E3%81%95%E3%81%84%20batch%0A%20%20%20%20%E3%81%A0%E3%81%91%E3%81%A7%E3%80%81%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%AE%E8%A8%88%E7%AE%97%E3%81%9D%E3%81%AE%E3%82%82%E3%81%AE%E3%81%8C%E6%94%AF%E9%85%8D%E7%9A%84%E3%81%AB%E3%81%AA%E3%82%8B%E5%A4%A7%E3%81%8D%E3%81%84%20batch%20%E3%81%A7%E3%81%AF%20eager%20%E3%81%A8%E3%81%BB%E3%81%BC%E5%90%8C%E3%81%98%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%80%8Cscript%20%E5%8C%96%E3%81%99%E3%82%8C%E3%81%B0%E9%80%9F%E3%81%8F%E3%81%AA%E3%82%8B%E3%80%8D%E3%82%8F%E3%81%91%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%80%81TorchScript%20%E3%81%AE%E4%B8%BB%E7%9B%AE%E7%9A%84%E3%81%AF%20Python%20%E9%9D%9E%E4%BE%9D%E5%AD%98%E3%81%AE%E9%85%8D%E5%B8%83%E5%BD%A2%E5%BC%8F%E3%81%A7%E3%81%82%E3%82%8B%0A%20%20%20%20%E3%81%93%E3%81%A8%E3%81%8C%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%23%23%23%20ExecuTorch%20%E3%81%AF%20backend%20%E6%AC%A1%E7%AC%AC%0A%0A%20%20%20%20ExecuTorch%20%E3%81%AF%20runtime%20%E8%87%AA%E4%BD%93%E3%82%92%E5%B0%8F%E3%81%95%E3%81%8F%E4%BF%9D%E3%81%A1%E3%80%81%E6%BC%94%E7%AE%97%E3%81%AE%E5%AE%9F%E8%A3%85%E3%81%AF%20backend%20%E3%81%AB%E5%A7%94%E3%81%AD%E3%82%8B%E8%A8%AD%E8%A8%88%E3%81%A7%E3%81%99%E3%80%82%E5%8F%82%E7%85%A7%E5%AE%9F%E8%A3%85%E3%81%AE%0A%20%20%20%20portable%20kernels%20%E3%81%AF%E5%8F%AF%E6%90%AC%E6%80%A7%E3%82%92%E6%9C%80%E5%84%AA%E5%85%88%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%9F%E3%82%81%202%20%E6%A1%81%E4%BB%A5%E4%B8%8A%E9%81%85%E3%81%8F%E3%80%81XNNPACK%20%E3%81%B8%20delegate%20%E3%81%97%E3%81%A6%E5%88%9D%E3%82%81%E3%81%A6%E4%BB%96%E3%81%AE%0A%20%20%20%20CPU%20runtime%20%E3%81%A8%E5%90%8C%E3%81%98%E5%9C%9F%E4%BF%B5%E3%81%AB%E4%B9%97%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82ExecuTorch%20%E3%81%AE%E6%80%A7%E8%83%BD%E3%82%92%E8%A9%95%E4%BE%A1%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AF%E3%80%81**%E3%81%A9%E3%81%AE%20backend%20%E3%81%B8%0A%20%20%20%20delegate%20%E3%81%95%E3%82%8C%E3%81%9F%E3%81%8B**%E3%82%92%E5%BF%85%E3%81%9A%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%23%23%23%20%E9%9D%99%E7%9A%84%20shape%20%E3%81%8B%E5%8B%95%E7%9A%84%20shape%20%E3%81%8B%0A%0A%20%20%20%20ExecuTorch%20%E3%81%AF%20AOT%20%E3%81%AE%E6%99%82%E7%82%B9%E3%81%A7%20shape%20%E3%82%92%E5%9B%BA%E5%AE%9A%E3%81%97%E3%80%81%E3%83%A1%E3%83%A2%E3%83%AA%E8%A8%88%E7%94%BB%E3%81%BE%E3%81%A7%E6%B1%BA%E3%82%81%E3%81%A6%E3%81%97%E3%81%BE%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E5%AE%9F%E8%A1%8C%E6%99%82%E3%81%AE%E5%88%A4%E6%96%AD%E3%81%8C%0A%20%20%20%20%E6%B8%9B%E3%82%8B%E3%81%B6%E3%82%93%E7%B5%84%E3%81%BF%E8%BE%BC%E3%81%BF%E6%A9%9F%E5%99%A8%E3%81%A7%E6%89%B1%E3%81%84%E3%82%84%E3%81%99%E3%81%84%E5%8F%8D%E9%9D%A2%E3%80%81batch%20size%20%E3%81%94%E3%81%A8%E3%81%AB%20%60.pte%60%20%E3%82%92%E4%BD%9C%E3%82%8A%E7%9B%B4%E3%81%99%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20ONNX%20Runtime%20%E3%81%A8%20OpenVINO%20%E3%81%AF%20batch%20%E6%AC%A1%E5%85%83%E3%82%92%E5%8F%AF%E5%A4%89%E3%81%AB%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E3%81%9D%E3%81%AE%E4%BB%A3%E3%82%8F%E3%82%8A%E5%AE%9F%E8%A1%8C%E3%81%AE%E3%81%9F%E3%81%B3%E3%81%AB%20shape%20%E3%81%AB%0A%20%20%20%20%E5%BF%9C%E3%81%98%E3%81%9F%E5%87%A6%E7%90%86%E3%81%8C%E5%85%A5%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E7%94%A8%E9%80%94%E3%81%8C%E3%80%8C%E5%9B%BA%E5%AE%9A%20shape%20%E3%81%A7%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E6%8E%A8%E8%AB%96%E3%81%99%E3%82%8B%E7%AB%AF%E6%9C%AB%E3%80%8D%E3%81%AA%E3%81%AE%E3%81%8B%E3%80%8C%E5%85%A5%E5%8A%9B%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%8C%E5%A4%89%E3%82%8F%E3%82%8B%0A%20%20%20%20%E3%82%B5%E3%83%BC%E3%83%90%E3%80%8D%E3%81%AA%E3%81%AE%E3%81%8B%E3%81%A7%E3%80%81%E9%81%B8%E3%81%B6%E3%81%B9%E3%81%8D%E7%B5%8C%E8%B7%AF%E3%81%8C%E5%A4%89%E3%82%8F%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%23%23%23%20%E6%B8%AC%E5%AE%9A%E5%80%A4%E3%82%92%E8%AA%AD%E3%82%80%E3%81%A8%E3%81%8D%E3%81%AE%E6%B3%A8%E6%84%8F%0A%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%BE%E3%81%A7%E3%81%AE%E6%95%B0%E5%80%A4%E3%81%AF%E3%80%8C%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%AE%E8%A8%98%E9%8C%B2%E3%80%8D%E3%81%AE%E8%A1%A8%E3%81%AB%E3%81%82%E3%82%8B%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%A7%E6%B8%AC%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82CPU%20%E3%81%AE%E4%B8%96%E4%BB%A3%E3%81%A8%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%AA%0A%20%20%20%20SIMD%20%E5%91%BD%E4%BB%A4%E3%80%81%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E6%95%B0%E3%80%81GPU%20%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%80%81OS%EF%BC%88%E3%81%93%E3%81%AE%E7%92%B0%E5%A2%83%E3%81%AF%20WSL2%EF%BC%89%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E5%82%BE%E5%90%91%E3%81%AF%E5%A4%89%E3%82%8F%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E7%89%B9%E3%81%AB%20**1%20%E7%94%BB%E5%83%8F%E3%81%82%E3%81%9F%E3%82%8A%E3%81%AE%E6%99%82%E9%96%93%E3%81%AF%20batch%20size%20%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E5%8D%98%E8%AA%BF%E3%81%AB%E6%B8%9B%E3%82%8B%E3%81%A8%E3%81%AF%E9%99%90%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93**%E3%80%82%E4%B8%8A%E3%81%AE%E8%A1%A8%E3%81%A7%E3%82%82%E3%80%81%0A%20%20%20%20CPU%20%E3%81%AE%20runtime%20%E3%81%AE%E3%81%84%E3%81%8F%E3%81%A4%E3%81%8B%E3%81%AF%E9%80%94%E4%B8%AD%E3%81%A7%E6%82%AA%E5%8C%96%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E5%B0%8F%E3%81%95%E3%81%84%20batch%20%E3%81%A7%E3%81%AF%E5%9B%BA%E5%AE%9A%E8%B2%BB%E3%81%8C%E3%80%81%0A%20%20%20%20%E5%A4%A7%E3%81%8D%E3%81%84%20batch%20%E3%81%A7%E3%81%AF%E3%83%A1%E3%83%A2%E3%83%AA%E5%B8%AF%E5%9F%9F%E3%81%A8%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AE%E5%8A%B9%E3%81%8D%E6%96%B9%E3%81%8C%E5%8A%B9%E3%81%8F%E3%81%9F%E3%82%81%E3%81%A7%E3%81%99%E3%80%82%E8%87%AA%E5%88%86%E3%81%AE%E9%85%8D%E7%BD%AE%E7%92%B0%E5%A2%83%E3%81%A7%E3%80%81%E5%AE%9F%E9%9A%9B%E3%81%AB%E4%BD%BF%E3%81%86%0A%20%20%20%20batch%20size%20%E3%81%A7%E6%B8%AC%E3%82%8A%E7%9B%B4%E3%81%99%E3%81%93%E3%81%A8%E3%81%8C%E9%87%8D%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E7%94%9F%E6%88%90%E7%89%A9%E3%81%AE%E5%89%8A%E9%99%A4%0A%0A%20%20%20%20%E6%AF%94%E8%BC%83%E3%81%AB%E4%BD%BF%E3%81%A3%E3%81%9F%20%60.pt%60%E3%83%BB%60.onnx%60%E3%83%BB%60.pte%60%20%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%80%81%E4%B8%80%E6%99%82%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E7%89%87%E4%BB%98%E3%81%91%E3%81%BE%E3%81%99%E3%80%82measurement%20%E7%94%A8%E3%81%AE%0A%20%20%20%20%E3%82%BB%E3%83%AB%E3%82%88%E3%82%8A%E5%BE%8C%E3%81%AB%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%80%81%E6%B8%AC%E5%AE%9A%E7%B5%90%E6%9E%9C%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%A8%E3%81%97%E3%81%A6%E5%8F%97%E3%81%91%E5%8F%96%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(artifact_dir)%3A%0A%20%20%20%20removed_files%20%3D%20%5B%5D%0A%20%20%20%20if%20artifact_dir.exists()%3A%0A%20%20%20%20%20%20%20%20for%20_artifact%20in%20sorted(artifact_dir.iterdir())%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20_artifact.is_file()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_artifact.unlink()%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20removed_files.append(_artifact.name)%0A%20%20%20%20%20%20%20%20if%20not%20any(artifact_dir.iterdir())%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20artifact_dir.rmdir()%0A%20%20%20%20pd.DataFrame(%7B%22removed%22%3A%20removed_files%20or%20%5B%22%E5%89%8A%E9%99%A4%E5%AF%BE%E8%B1%A1%E3%81%AA%E3%81%97%22%5D%7D)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%81%BE%E3%81%A8%E3%82%81%0A%0A%20%20%20%20-%20%E5%AD%A6%E7%BF%92%E6%B8%88%E3%81%BF%E3%81%AE%E9%87%8D%E3%81%BF%E3%81%AF%E3%80%81TorchScript%E3%83%BBONNX%20Runtime%E3%83%BBOpenVINO%E3%83%BBExecuTorch%20%E3%81%AE%E3%81%84%E3%81%9A%E3%82%8C%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%A6%E3%82%82%0A%20%20%20%20%20%20%E4%BA%88%E6%B8%AC%E3%83%A9%E3%83%99%E3%83%AB%E3%81%8C%E4%B8%80%E8%87%B4%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82CPU%20%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E9%99%90%E3%82%8A%20logits%20%E3%81%AE%E5%B7%AE%E3%82%82%20float32%20%E3%81%AE%E4%B8%B8%E3%82%81%E8%AA%A4%E5%B7%AE%E3%81%AE%E7%AF%84%E5%9B%B2%E3%81%A7%E3%81%99%0A%20%20%20%20-%20%E3%81%9F%E3%81%A0%E3%81%97%20CUDA%20EP%20%E3%81%AF%E6%97%A2%E5%AE%9A%E3%81%A7%20TF32%20%E3%82%92%E4%BD%BF%E3%81%86%E3%81%9F%E3%82%81%E3%80%81GPU%20%E3%81%A7%E3%81%AF%E5%B7%AE%E3%81%8C%201%20%E6%A1%81%E4%BB%A5%E4%B8%8A%E5%A4%A7%E3%81%8D%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82**%E5%AE%9F%E8%A1%8C%E5%85%88%E3%82%92%0A%20%20%20%20%20%20%E5%A4%89%E3%81%88%E3%82%8B%E3%81%A8%E6%95%B0%E5%80%A4%E3%82%82%E5%A4%89%E3%82%8F%E3%82%8A%E3%81%86%E3%82%8B**%E3%81%AE%E3%81%A7%E3%80%81%E8%A8%B1%E5%AE%B9%E8%AA%A4%E5%B7%AE%E3%81%AF%20runtime%20%E3%81%A8%20device%20%E3%81%94%E3%81%A8%E3%81%AB%E6%B1%BA%E3%82%81%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%0A%20%20%20%20-%20%E4%B8%80%E6%96%B9%E3%81%A7%E6%8E%A8%E8%AB%96%E6%99%82%E9%96%93%E3%81%AF%E3%80%81%E5%90%8C%E3%81%98%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A7%E3%82%82%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E6%A1%81%E5%8D%98%E4%BD%8D%E3%81%A7%E5%A4%89%E3%82%8F%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E6%B1%BA%E3%82%81%E3%82%8B%E3%81%AE%E3%81%AF%0A%20%20%20%20%20%20%E3%80%8CCPU%20%E3%81%8B%20GPU%20%E3%81%8B%E3%80%8D%E3%81%A0%E3%81%91%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%80%81**batch%20size%E3%83%BB%E6%8E%A8%E8%AB%96%20runtime%E3%83%BBdelegate%20%E3%81%99%E3%82%8B%20backend**%E3%81%AE%0A%20%20%20%20%20%20%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A7%E3%81%99%0A%20%20%20%20-%20GPU%20%E3%81%AF%20batch%20%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%82%89%E3%82%8C%E3%82%8B%E7%94%A8%E9%80%94%E3%81%A7%E5%8A%B9%E3%81%8D%E3%81%BE%E3%81%99%E3%80%821%20%E4%BB%B6%E3%81%9A%E3%81%A4%E4%BD%8E%E9%81%85%E5%BB%B6%E3%81%A7%E8%BF%94%E3%81%99%E7%94%A8%E9%80%94%E3%81%A7%E3%81%AF%E3%80%81CPU%20%E3%81%AE%E6%8E%A8%E8%AB%96%E5%B0%82%E7%94%A8%0A%20%20%20%20%20%20runtime%20%E3%81%AE%E3%81%BB%E3%81%86%E3%81%8C%E9%80%9F%E3%81%8F%E3%80%81%E3%81%93%E3%81%AE%E7%92%B0%E5%A2%83%E3%81%A7%E3%81%AF%20batch%20size%201%20%E3%81%A7%20ONNX%20Runtime%20%E3%81%AE%20CPU%20EP%20%E3%81%8C%0A%20%20%20%20%20%20GPU%20%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%82%88%E3%82%8A%E9%80%9F%E3%81%8F%E5%BF%9C%E7%AD%94%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%0A%20%20%20%20-%20GPU%20%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%8B%E3%81%AF%20runtime%20%E4%BE%9D%E5%AD%98%E3%81%A7%E3%81%99%E3%80%82ONNX%20Runtime%20%E3%81%AF%20EP%20%E3%82%92%E5%B7%AE%E3%81%97%E6%9B%BF%E3%81%88%E3%82%8B%E3%81%A0%E3%81%91%E3%81%A7%20CPU%20%E3%81%A8%20CUDA%20%E3%82%92%0A%20%20%20%20%20%20%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81OpenVINO%20%E3%81%AE%20GPU%20%E3%81%AF%20Intel%20%E8%A3%BD%20GPU%20%E5%B0%82%E7%94%A8%E3%80%81ExecuTorch%20%E3%81%AE%20XNNPACK%20%E3%81%AF%20CPU%20%E5%B0%82%E7%94%A8%E3%81%A7%E3%81%99%0A%20%20%20%20-%20%E7%AB%AF%E6%9C%AB%E5%81%B4%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%E3%81%AA%E3%82%89%20ExecuTorch%20%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%20AOT%20%E3%81%A7%20shape%20%E3%82%92%E5%9B%BA%E5%AE%9A%E3%81%99%E3%82%8B%E7%B5%8C%E8%B7%AF%E3%81%8C%E5%90%91%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81backend%20%E3%82%92%0A%20%20%20%20%20%20delegate%20%E3%81%97%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%E6%80%A7%E8%83%BD%E3%81%AF%E5%87%BA%E3%81%BE%E3%81%9B%E3%82%93%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
a4c63ba1932a76117ae8a945f7a7e5de