From fabe74390c726a238cc3523fd20e398ca072dfc1 Mon Sep 17 00:00:00 2001 From: Byungchul Kim Date: Fri, 10 May 2024 16:30:00 -0700 Subject: [PATCH] [iree-prof-tools] Run iree-vis for mlir asm files. (#245) 1) Refactor extension.ts into 2 ts files. 2) Convert mlir files to temporary graph json file when filename ends with ".mlir" and iree-vis path is set which is empty by default. 3) Remove temp files when webview is closed. 4) iree-vis returns non-zero on error. 5) Reset port number when model-explorer terminal is gone. Signed-off-by: Byungchul Kim --- iree-prof-tools/iree-vis.cc | 14 ++- .../model-explorer-extension/README.md | 30 +++-- .../model-explorer-settings.png | Bin 0 -> 146111 bytes .../model-explorer-extension/package.json | 5 + .../model-explorer-extension/src/extension.ts | 98 +++++----------- .../model-explorer-extension/src/mlirUtil.ts | 42 +++++++ .../src/modelExplorer.ts | 106 ++++++++++++++++++ 7 files changed, 212 insertions(+), 83 deletions(-) create mode 100644 iree-prof-tools/model-explorer-extension/model-explorer-settings.png create mode 100644 iree-prof-tools/model-explorer-extension/src/mlirUtil.ts create mode 100644 iree-prof-tools/model-explorer-extension/src/modelExplorer.ts diff --git a/iree-prof-tools/iree-vis.cc b/iree-prof-tools/iree-vis.cc index 263379a..4b3d316 100644 --- a/iree-prof-tools/iree-vis.cc +++ b/iree-prof-tools/iree-vis.cc @@ -34,12 +34,12 @@ ABSL_FLAG(int, min_num_ops_to_group, 3, namespace iree_prof::graph { namespace { -void ConvertToGraphJson(mlir::ModuleOp module) { +int ConvertToGraphJson(mlir::ModuleOp module) { std::string output_json_file = absl::GetFlag(FLAGS_output_json_file); std::ofstream fout(output_json_file.c_str()); if (!fout.is_open() || !fout.good()) { LOG(ERROR) << "Can't open output file: " << output_json_file; - return; + return 1; } auto label = std::filesystem::path(absl::GetFlag(FLAGS_input_iree_file)) @@ -49,7 +49,7 @@ void ConvertToGraphJson(mlir::ModuleOp module) { absl::GetFlag(FLAGS_min_num_ops_to_group)); if (!graph_collection.ok()) { LOG(ERROR) << graph_collection.status(); - return; + return 1; } { @@ -59,6 +59,7 @@ void ConvertToGraphJson(mlir::ModuleOp module) { LOG(INFO) << "Wrote " << fout.tellp() << " bytes to " << output_json_file; fout.close(); + return 0; } } // namespace @@ -89,18 +90,21 @@ int main(int argc, char** argv) { auto* invoke = ireeCompilerInvocationCreate(session); LOG(INFO) << "Parsing " << input_iree_file << "..."; + int ret_val = 0; if (ireeCompilerInvocationParseSource(invoke, source)) { LOG(INFO) << "Parsed " << input_iree_file << " successfully."; auto op = ireeCompilerInvocationExportStealModule(invoke); - iree_prof::graph::ConvertToGraphJson( + ret_val = iree_prof::graph::ConvertToGraphJson( llvm::cast(reinterpret_cast(op.ptr))); // Re-import op into the session to destroy it properly. ireeCompilerInvocationImportStealModule(invoke, op); + } else { + ret_val = 1; } ireeCompilerInvocationDestroy(invoke); ireeCompilerSourceDestroy(source); ireeCompilerSessionDestroy(session); ireeCompilerGlobalShutdown(); - return 0; + return ret_val; } diff --git a/iree-prof-tools/model-explorer-extension/README.md b/iree-prof-tools/model-explorer-extension/README.md index f93fde4..0265f53 100644 --- a/iree-prof-tools/model-explorer-extension/README.md +++ b/iree-prof-tools/model-explorer-extension/README.md @@ -11,15 +11,31 @@ Model explorer must be installed before this extension get started. pip install model-explorer ``` -This extension is started by executing `Model Explorer` command from the Command Palette -on a VS code active text editor of a graph json file. The extension loads the graph json -file to the model explorer web server. If the model explorer is not running, it starts one -with a random port number in a terminal. +This extension is started by executing `Explore Model` command from the Command +Palette on a VS code active text editor of a graph json file. The extension +loads the file of the current focused editor to the model explorer web server. +If the model explorer is not running, it starts one with a random port number +in a terminal. + +Currently, it supports Tensorflow saved_model.pb files, TFLite files, StableHLO +MLIR files, IREE MLIR files, and graph json files. For IREE MLIR files, it +requires `iree-vis` to convert them into graph json files. + +``` +cd /iree-prof-tools/ +cmake -G Ninja -B ../../iree-prof-build/ . +cmake --build ../../iree-prof-build/ --target iree-vis +``` + +Once `iree-vis` is built, set its path in `ModelExplorer: Iree Vis Path` +setting. + +![Model Explorer Settings](model-explorer-settings.png) ## How to make changes into it -To make changes of this extension, VS Code, Node.js and typescript compiler are necessary. -Please follow installation guides of +To make changes of this extension, VS Code, Node.js and typescript compiler are +necessary. Please follow installation guides of [VS Code](https://code.visualstudio.com/docs/setup/setup-overview) and [Node.js](https://nodejs.org/en/download). @@ -32,4 +48,4 @@ code . ``` Once the workspace is open, follow the -[steps to build webview extensions](https://code.visualstudio.com/api/extension-guides/webview). \ No newline at end of file +[steps to build webview extensions](https://code.visualstudio.com/api/extension-guides/webview). diff --git a/iree-prof-tools/model-explorer-extension/model-explorer-settings.png b/iree-prof-tools/model-explorer-extension/model-explorer-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..8a62a9a72e8697a009d5eda796ddc373173d637a GIT binary patch literal 146111 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%0A)I{GAh+tq@Mu*|DJdk{6YM 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 BF#iAm literal 0 HcmV?d00001 diff --git a/iree-prof-tools/model-explorer-extension/package.json b/iree-prof-tools/model-explorer-extension/package.json index e7dc627..d44593d 100644 --- a/iree-prof-tools/model-explorer-extension/package.json +++ b/iree-prof-tools/model-explorer-extension/package.json @@ -29,6 +29,11 @@ "type": "string", "description": "Executable path to start model explorer internally when externalModelExplorerUrl is empty.", "default": "model-explorer" + }, + "modelExplorer.ireeVisPath": { + "type": "string", + "description": "Executable path to convert IREE intermediate MLIR asm files to graph JSON files.", + "default": "" } } } diff --git a/iree-prof-tools/model-explorer-extension/src/extension.ts b/iree-prof-tools/model-explorer-extension/src/extension.ts index da49726..7a0d308 100644 --- a/iree-prof-tools/model-explorer-extension/src/extension.ts +++ b/iree-prof-tools/model-explorer-extension/src/extension.ts @@ -1,86 +1,42 @@ import * as vscode from 'vscode'; +import {convertMlirToJsonIfNecessary} from './mlirUtil'; +import {WebviewPanelForModelExplorer} from './modelExplorer'; export function activate(context: vscode.ExtensionContext) { - // A random port number of model explorer web server. - const port = 30080 + Math.floor(Math.random() * 9900); - - // Internal model explorer web server shared by multiple webview panels. - var internalModelExplorerTerminal: vscode.Terminal|null = null - - async function startModelExplorer() { - var modelFile = vscode.window.activeTextEditor?.document.fileName; - if (!modelFile) { - const openFiles = await vscode.window.showOpenDialog({ - canSelectFiles: true, - canSelectMany: false, - title: 'No active text editor or too large file. Open a model file' - }); - modelFile = openFiles?.length == 1 ? openFiles[0].fsPath : undefined; + context.subscriptions.push( + vscode.commands.registerCommand('modelExplorer.show', async () => { + const modelFile = await getModelFileName(); if (!modelFile) { vscode.window.showInformationMessage('Invalid model file path.'); return; } - } - const config = vscode.workspace.getConfiguration('modelExplorer'); - const externalUrl = config.get('externalModelExplorerUrl') ?? ''; - const connectToExternalServer = externalUrl.length > 0; - const modelExplorerUrl = connectToExternalServer ? externalUrl : `http://localhost:${port}`; - - const panel = vscode.window.createWebviewPanel( - 'modelExplorer', - 'Model Explorer', - vscode.window.activeTextEditor?.viewColumn ?? vscode.ViewColumn.One, - { // Webview options. - enableScripts: true - } - ); - if (connectToExternalServer || internalModelExplorerTerminal != null) { - panel.webview.html = getWebviewContent(modelExplorerUrl, modelFile); - return; - } + const panel = new WebviewPanelForModelExplorer(context); + context.subscriptions.push(panel); - // No model explorer is available. Starts one. - vscode.window.showInformationMessage('Starting a model explorer web server...'); - internalModelExplorerTerminal = - vscode.window.createTerminal( - 'modelExplorerWebServer', - config.get('internalModelExplorerPath') ?? 'model-explorer', - ['--no_open_in_browser', `--port=${port}`] - ); - vscode.window.onDidCloseTerminal(terminal => { - if (terminal == internalModelExplorerTerminal) { - vscode.window.showInformationMessage('Model explorer web server is closed.'); - internalModelExplorerTerminal = null; + const modelFileToLoad = await convertMlirToJsonIfNecessary(modelFile); + if (modelFileToLoad != modelFile) { + panel.addDisposeCallback(() => { + vscode.workspace.fs.delete(vscode.Uri.file(modelFileToLoad)); + }); } - }); - context.subscriptions.push(internalModelExplorerTerminal); - // Delay webview rendering to wait for model explorer ready. - const timeout = setTimeout(() => { - panel.webview.html = getWebviewContent(modelExplorerUrl, modelFile!!); - }, 2000); // 2000 is arbitrary. Need a more reliable way. + panel.startModelExplorer(modelFileToLoad); + }) + ); +} - panel.onDidDispose(() => { clearTimeout(timeout); }, null, context.subscriptions); +async function getModelFileName(): Promise { + const fileName = vscode.window.activeTextEditor?.document.fileName; + if (fileName) { + return fileName; } - context.subscriptions.push( - vscode.commands.registerCommand('modelExplorer.show', startModelExplorer)); -} + const openFiles = await vscode.window.showOpenDialog({ + canSelectFiles: true, + canSelectMany: false, + title: 'No active text editor or too large file. Open a model file' + }); -function getWebviewContent(modelExplorerUrl: string, modelFile: string) { - vscode.window.showInformationMessage(`Loading a model file, ${modelFile}...`); - const encodedData = encodeURIComponent(`{"models":[{"url":"${modelFile}"}]}`); - return ` - - - - Model Explorer - - - - -`; -} \ No newline at end of file + return openFiles?.length == 1 ? openFiles[0].fsPath : undefined; +} diff --git a/iree-prof-tools/model-explorer-extension/src/mlirUtil.ts b/iree-prof-tools/model-explorer-extension/src/mlirUtil.ts new file mode 100644 index 0000000..7c513d3 --- /dev/null +++ b/iree-prof-tools/model-explorer-extension/src/mlirUtil.ts @@ -0,0 +1,42 @@ +import * as vscode from 'vscode'; + +export async function convertMlirToJsonIfNecessary( + modelFile: string +): Promise { + const config = vscode.workspace.getConfiguration('modelExplorer'); + const ireeVisPath = config.get('ireeVisPath') ?? ''; + if (!modelFile.endsWith('.mlir') || ireeVisPath.length == 0) { + return modelFile; + } + + vscode.window.showInformationMessage( + `Generating graph for a model file, ${modelFile}...` + ); + const graphJsonFile = modelFile + '.graph.json'; + const ireeVisTerminal = vscode.window.createTerminal({ + 'name': 'ireeVisRunner', + 'shellPath': ireeVisPath, + 'shellArgs': [ + `--input_iree_file=${modelFile}`, + `--output_json_file=${graphJsonFile}` + ], + 'hideFromUser': true + }); + + return new Promise((resolve, reject) => { + const token = vscode.window.onDidCloseTerminal(terminal => { + if (terminal == ireeVisTerminal) { + token.dispose(); + if (terminal.exitStatus?.code == 0) { + vscode.window.showInformationMessage( + `Succeeded to generate a graph file, ${graphJsonFile}.` + ); + resolve(graphJsonFile); + } else { + vscode.window.showErrorMessage('Failed to generate a graph file.'); + resolve(modelFile); + } + } + }); + }); +} diff --git a/iree-prof-tools/model-explorer-extension/src/modelExplorer.ts b/iree-prof-tools/model-explorer-extension/src/modelExplorer.ts new file mode 100644 index 0000000..20b47de --- /dev/null +++ b/iree-prof-tools/model-explorer-extension/src/modelExplorer.ts @@ -0,0 +1,106 @@ +import * as vscode from 'vscode'; + +// Internal model explorer web server shared by multiple webview panels. +var internalModelExplorerTerminal: vscode.Terminal | undefined = undefined; + +// A random port number of internal model explorer web server. +var internalModelExplorerPort: number | undefined = undefined; + +export class WebviewPanelForModelExplorer { + context: vscode.ExtensionContext; + panel: vscode.WebviewPanel; + disposeCallbacks: (() => void)[]; + + constructor(context: vscode.ExtensionContext) { + this.context = context; + this.panel = vscode.window.createWebviewPanel( + 'modelExplorer', + 'Model Explorer', + vscode.window.activeTextEditor?.viewColumn ?? vscode.ViewColumn.One, + { // Webview options. + enableScripts: true, + retainContextWhenHidden: true + } + ); + + this.disposeCallbacks = []; + + this.panel.onDidDispose( + () => { for (let f of this.disposeCallbacks) { f(); }}, + null, + context.subscriptions); + } + + dispose() { + this.panel.dispose(); + } + + addDisposeCallback(f: () => void) { + this.disposeCallbacks.push(f); + } + + startModelExplorer(modelFile: string) { + const config = vscode.workspace.getConfiguration('modelExplorer'); + const externalUrl = config.get('externalModelExplorerUrl') ?? ''; + if (externalUrl.length > 0) { + this.panel.webview.html = getWebviewContent(externalUrl, modelFile); + return; + } + + internalModelExplorerPort = internalModelExplorerPort ?? getRandomPort(); + const modelExplorerUrl = `http://localhost:${internalModelExplorerPort}`; + if (internalModelExplorerTerminal != null) { + this.panel.webview.html = getWebviewContent(modelExplorerUrl, modelFile); + return; + } + + // No model explorer is available. Starts one. + vscode.window.showInformationMessage( + 'Starting a model explorer web server...' + ); + internalModelExplorerTerminal = vscode.window.createTerminal( + 'modelExplorerWebServer', + config.get('internalModelExplorerPath') ?? 'model-explorer', + ['--no_open_in_browser', `--port=${internalModelExplorerPort}`] + ); + const token = vscode.window.onDidCloseTerminal(terminal => { + if (terminal == internalModelExplorerTerminal) { + token.dispose(); + vscode.window.showInformationMessage( + 'Model explorer web server is closed.' + ); + internalModelExplorerTerminal = undefined; + internalModelExplorerPort = undefined; + } + }); + this.context.subscriptions.push(internalModelExplorerTerminal); + + // Delay webview rendering to wait for model explorer ready. + const timeout = setTimeout(() => { + this.panel.webview.html = getWebviewContent(modelExplorerUrl, modelFile); + }, 2000); // 2000 is arbitrary. Need a more reliable way. + + this.addDisposeCallback(() => { clearTimeout(timeout); }); + } +} + +function getRandomPort(): number { + return 30080 + Math.floor(Math.random() * 9900); +} + +function getWebviewContent(modelExplorerUrl: string, modelFile: string) { + vscode.window.showInformationMessage(`Loading a model file, ${modelFile}...`); + const encodedData = encodeURIComponent(`{"models":[{"url":"${modelFile}"}]}`); + return ` + + + + Model Explorer + + + + +`; +}