|
25 | 25 | import re |
26 | 26 | import signal |
27 | 27 | import psutil |
| 28 | +from contextlib import contextmanager |
| 29 | +import ctypes |
28 | 30 |
|
29 | 31 | # from typing import TextIO |
30 | 32 | # from utils.tpuc_cmd_builder import TpucCommandBuilder |
31 | 33 |
|
32 | 34 |
|
| 35 | +@contextmanager |
| 36 | +def suppress_output(): |
| 37 | + import sys |
| 38 | + import os |
| 39 | + import tempfile |
| 40 | + import time |
| 41 | + |
| 42 | + original_stdout_fd = sys.stdout.fileno() |
| 43 | + original_stderr_fd = sys.stderr.fileno() |
| 44 | + original_stdout_copy = os.dup(original_stdout_fd) |
| 45 | + original_stderr_copy = os.dup(original_stderr_fd) |
| 46 | + |
| 47 | + temp_stdout = tempfile.NamedTemporaryFile(mode='w+', delete=False) |
| 48 | + temp_stderr = tempfile.NamedTemporaryFile(mode='w+', delete=False) |
| 49 | + temp_stdout_name = temp_stdout.name |
| 50 | + temp_stderr_name = temp_stderr.name |
| 51 | + temp_stdout.close() |
| 52 | + temp_stderr.close() |
| 53 | + |
| 54 | + try: |
| 55 | + temp_stdout_fd = os.open(temp_stdout_name, os.O_WRONLY) |
| 56 | + temp_stderr_fd = os.open(temp_stderr_name, os.O_WRONLY) |
| 57 | + os.dup2(temp_stdout_fd, original_stdout_fd) |
| 58 | + os.dup2(temp_stderr_fd, original_stderr_fd) |
| 59 | + os.close(temp_stdout_fd) |
| 60 | + os.close(temp_stderr_fd) |
| 61 | + yield |
| 62 | + finally: |
| 63 | + sys.stdout.flush() |
| 64 | + sys.stderr.flush() |
| 65 | + |
| 66 | + try: |
| 67 | + libc = ctypes.CDLL("libc.so.6") |
| 68 | + libc.fflush(None) |
| 69 | + time.sleep(0.05) |
| 70 | + except Exception: |
| 71 | + pass |
| 72 | + |
| 73 | + os.dup2(original_stdout_copy, original_stdout_fd) |
| 74 | + os.dup2(original_stderr_copy, original_stderr_fd) |
| 75 | + |
| 76 | + os.close(original_stdout_copy) |
| 77 | + os.close(original_stderr_copy) |
| 78 | + |
| 79 | + try: |
| 80 | + with open(temp_stdout_name, 'r+') as f: |
| 81 | + f.truncate(0) |
| 82 | + with open(temp_stderr_name, 'r+') as f: |
| 83 | + f.truncate(0) |
| 84 | + os.remove(temp_stdout_name) |
| 85 | + os.remove(temp_stderr_name) |
| 86 | + except Exception: |
| 87 | + pass |
| 88 | + |
| 89 | + sys.stdout.flush() |
| 90 | + sys.stderr.flush() |
| 91 | + |
| 92 | + |
33 | 93 | def _parse_timeout(timeout_str): |
34 | 94 | if not timeout_str: |
35 | 95 | return None |
@@ -1079,23 +1139,16 @@ def origin_mlir_txt_to_bmodel(*, |
1079 | 1139 | mlir_txt = converter.get_mlir_txt() |
1080 | 1140 | weight_option = "weight_in_mem=True" |
1081 | 1141 | if log_level == "quiet": |
1082 | | - options.insert(0, f'--init="{weight_option}"') |
1083 | | - with open(os.devnull, "w") as devnull: |
1084 | | - os.dup2(devnull.fileno(), sys.stdout.fileno()) |
1085 | | - os.dup2(devnull.fileno(), sys.stderr.fileno()) |
1086 | | - try: |
| 1142 | + options.insert(0, f'--init="{weight_option} level=-1"') |
| 1143 | + with suppress_output(): |
1087 | 1144 | pymlir.run_pass_pipeline(mlir_txt, options) |
1088 | | - finally: |
1089 | | - os.dup2(sys.__stdout__.fileno(), sys.stdout.fileno()) |
1090 | | - os.dup2(sys.__stderr__.fileno(), sys.stderr.fileno()) |
1091 | 1145 | else: |
1092 | 1146 | if log_level == "simple": |
1093 | 1147 | options = [opt for opt in options if not opt.startswith('--init')] |
1094 | 1148 | options.insert(0, f'--init="{weight_option} level=1"') |
1095 | 1149 | elif log_level == "only-layer-group": |
1096 | 1150 | options = [opt for opt in options if not opt.startswith('--init')] |
1097 | 1151 | options.insert(0, f'--init="{weight_option} level=2"') |
1098 | | - # pymlir.debug(["layer-group","LayerGroupUtil"]) #todo |
1099 | 1152 | else: |
1100 | 1153 | options.insert(0, f'--init="{weight_option}"') |
1101 | 1154 | print("options: ", options) |
|
0 commit comments