Xmaster6y commited on
Commit
db21bce
·
1 Parent(s): ee3c59e

fixed concu & best move

Browse files
app.py CHANGED
@@ -3,7 +3,6 @@ Gradio demo for lczerolens.
3
  """
4
 
5
  import gradio as gr
6
- import subprocess
7
 
8
  from demo.interfaces import (
9
  board,
 
3
  """
4
 
5
  import gradio as gr
 
6
 
7
  from demo.interfaces import (
8
  board,
demo/interfaces/activations.py CHANGED
@@ -129,21 +129,26 @@ with gr.Blocks() as interface:
129
  initial_load,
130
  inputs=[model_name, game_pgn, board_fen, layer_index, channel_index],
131
  outputs=[model, board, activations, image_board, colorbar],
 
 
132
  )
133
  game_pgn.submit(
134
  on_board_change,
135
  inputs=[model, game_pgn, board_fen, layer_index, channel_index],
136
  outputs=[board, activations, image_board, colorbar],
 
137
  )
138
  board_fen.submit(
139
  on_board_change,
140
  inputs=[model, game_pgn, board_fen, layer_index, channel_index],
141
  outputs=[board, activations, image_board, colorbar],
 
142
  )
143
  model_name.change(
144
  on_model_change,
145
  inputs=[model_name, board, layer_index, channel_index],
146
  outputs=[model, activations, image_board, colorbar],
 
147
  )
148
  layer_index.change(
149
  render_activations,
 
129
  initial_load,
130
  inputs=[model_name, game_pgn, board_fen, layer_index, channel_index],
131
  outputs=[model, board, activations, image_board, colorbar],
132
+ concurrency_limit=1,
133
+ concurrency_id="trace_queue"
134
  )
135
  game_pgn.submit(
136
  on_board_change,
137
  inputs=[model, game_pgn, board_fen, layer_index, channel_index],
138
  outputs=[board, activations, image_board, colorbar],
139
+ concurrency_id="trace_queue"
140
  )
141
  board_fen.submit(
142
  on_board_change,
143
  inputs=[model, game_pgn, board_fen, layer_index, channel_index],
144
  outputs=[board, activations, image_board, colorbar],
145
+ concurrency_id="trace_queue"
146
  )
147
  model_name.change(
148
  on_model_change,
149
  inputs=[model_name, board, layer_index, channel_index],
150
  outputs=[model, activations, image_board, colorbar],
151
+ concurrency_id="trace_queue"
152
  )
153
  layer_index.change(
154
  render_activations,
demo/interfaces/gradients.py CHANGED
@@ -10,17 +10,20 @@ import os
10
 
11
  from lczerolens import LczeroBoard, LczeroModel, Lens
12
 
13
- from .. import constants
14
 
15
  def get_model(model_name: str):
16
  return LczeroModel.from_onnx_path(os.path.join(constants.ONNX_MODEL_DIRECTORY, model_name))
17
 
18
- def get_gradients(model: LczeroModel, board: LczeroBoard, wdl_target: str):
19
  lens = Lens.from_name("gradient")
20
- wdl_index = {"win": 0, "draw": 1, "loss": 2}[wdl_target]
21
 
22
  def init_target(model):
23
- return getattr(model, "output/wdl").output[:, wdl_index]
 
 
 
 
24
  results = lens.analyse(model, board, init_target=init_target)
25
 
26
  return results["input_grad"]
@@ -57,27 +60,27 @@ def render_gradients(board: LczeroBoard, gradients, average_over_planes:bool, be
57
  )
58
  return f"{constants.FIGURE_DIRECTORY}/gradients_board.svg", f"{constants.FIGURE_DIRECTORY}/gradients_colorbar.svg"
59
 
60
- def initial_load(model_name: str, board_fen: str, game_pgn: str, wdl_target: str, average_over_planes:bool, begin_average_index:int, end_average_index:int, plane_index: int):
61
  model = get_model(model_name)
62
  board = get_board(game_pgn, board_fen)
63
- gradients = get_gradients(model, board, wdl_target)
64
  plots = render_gradients(board, gradients, average_over_planes, begin_average_index, end_average_index, plane_index)
65
  return model, board, gradients, *plots
66
 
67
- def on_board_change(model: LczeroModel, game_pgn: str, board_fen: str, wdl_target: str, average_over_planes:bool, begin_average_index:int, end_average_index:int, plane_index: int):
68
  board = get_board(game_pgn, board_fen)
69
- gradients = get_gradients(model, board, wdl_target)
70
  plots = render_gradients(board, gradients, average_over_planes, begin_average_index, end_average_index, plane_index)
71
  return board, gradients, *plots
72
 
73
- def on_model_change(model_name: str, board: LczeroBoard, wdl_target: str, average_over_planes:bool, begin_average_index:int, end_average_index:int, plane_index: int):
74
  model = get_model(model_name)
75
- gradients = get_gradients(model, board, wdl_target)
76
  plots = render_gradients(board, gradients, average_over_planes, begin_average_index, end_average_index, plane_index)
77
  return model, gradients, *plots
78
 
79
- def on_wdl_target_change(model: LczeroModel, board: LczeroBoard, wdl_target: str, average_over_planes:bool, begin_average_index:int, end_average_index:int, plane_index: int):
80
- gradients = get_gradients(model, board, wdl_target)
81
  plots = render_gradients(board, gradients, average_over_planes, begin_average_index, end_average_index, plane_index)
82
  return gradients, *plots
83
 
@@ -104,8 +107,8 @@ with gr.Blocks() as interface:
104
  label="Model",
105
  choices=constants.ONNX_MODEL_NAMES,
106
  )
107
- wdl_target = gr.Radio(
108
- ["win", "draw", "loss"], label="WDL target",
109
  value="win",
110
  )
111
  with gr.Group():
@@ -143,28 +146,33 @@ with gr.Blocks() as interface:
143
 
144
  interface.load(
145
  initial_load,
146
- inputs=[model_name, game_pgn, board_fen, wdl_target, average_over_planes, begin_average_index, end_average_index, plane_index],
147
  outputs=[model, board, gradients, image_board, colorbar],
 
148
  )
149
  game_pgn.submit(
150
  on_board_change,
151
- inputs=[model, game_pgn, board_fen, wdl_target, average_over_planes, begin_average_index, end_average_index, plane_index],
152
  outputs=[board, gradients, image_board, colorbar],
 
153
  )
154
  board_fen.submit(
155
  on_board_change,
156
- inputs=[model, game_pgn, board_fen, wdl_target, average_over_planes, begin_average_index, end_average_index, plane_index],
157
  outputs=[board, gradients, image_board, colorbar],
 
158
  )
159
  model_name.change(
160
  on_model_change,
161
- inputs=[model_name, board, wdl_target, average_over_planes, begin_average_index, end_average_index, plane_index],
162
  outputs=[model, gradients, image_board, colorbar],
 
163
  )
164
- wdl_target.change(
165
- on_wdl_target_change,
166
- inputs=[model, board, wdl_target, average_over_planes, begin_average_index, end_average_index, plane_index],
167
  outputs=[gradients, image_board, colorbar],
 
168
  )
169
  for render_arg in [average_over_planes, begin_average_index, end_average_index, plane_index]:
170
  render_arg.change(
 
10
 
11
  from lczerolens import LczeroBoard, LczeroModel, Lens
12
 
13
+ from demo import constants
14
 
15
  def get_model(model_name: str):
16
  return LczeroModel.from_onnx_path(os.path.join(constants.ONNX_MODEL_DIRECTORY, model_name))
17
 
18
+ def get_gradients(model: LczeroModel, board: LczeroBoard, target: str):
19
  lens = Lens.from_name("gradient")
 
20
 
21
  def init_target(model):
22
+ if target == "best_move":
23
+ return getattr(model, "output/policy").output.max(dim=1).values
24
+ else:
25
+ wdl_index = {"win": 0, "draw": 1, "loss": 2}[target]
26
+ return getattr(model, "output/wdl").output[:, wdl_index]
27
  results = lens.analyse(model, board, init_target=init_target)
28
 
29
  return results["input_grad"]
 
60
  )
61
  return f"{constants.FIGURE_DIRECTORY}/gradients_board.svg", f"{constants.FIGURE_DIRECTORY}/gradients_colorbar.svg"
62
 
63
+ def initial_load(model_name: str, board_fen: str, game_pgn: str, target: str, average_over_planes:bool, begin_average_index:int, end_average_index:int, plane_index: int):
64
  model = get_model(model_name)
65
  board = get_board(game_pgn, board_fen)
66
+ gradients = get_gradients(model, board, target)
67
  plots = render_gradients(board, gradients, average_over_planes, begin_average_index, end_average_index, plane_index)
68
  return model, board, gradients, *plots
69
 
70
+ def on_board_change(model: LczeroModel, game_pgn: str, board_fen: str, target: str, average_over_planes:bool, begin_average_index:int, end_average_index:int, plane_index: int):
71
  board = get_board(game_pgn, board_fen)
72
+ gradients = get_gradients(model, board, target)
73
  plots = render_gradients(board, gradients, average_over_planes, begin_average_index, end_average_index, plane_index)
74
  return board, gradients, *plots
75
 
76
+ def on_model_change(model_name: str, board: LczeroBoard, target: str, average_over_planes:bool, begin_average_index:int, end_average_index:int, plane_index: int):
77
  model = get_model(model_name)
78
+ gradients = get_gradients(model, board, target)
79
  plots = render_gradients(board, gradients, average_over_planes, begin_average_index, end_average_index, plane_index)
80
  return model, gradients, *plots
81
 
82
+ def on_target_change(model: LczeroModel, board: LczeroBoard, target: str, average_over_planes:bool, begin_average_index:int, end_average_index:int, plane_index: int):
83
+ gradients = get_gradients(model, board, target)
84
  plots = render_gradients(board, gradients, average_over_planes, begin_average_index, end_average_index, plane_index)
85
  return gradients, *plots
86
 
 
107
  label="Model",
108
  choices=constants.ONNX_MODEL_NAMES,
109
  )
110
+ target = gr.Radio(
111
+ ["win", "draw", "loss", "best_move"], label="Target",
112
  value="win",
113
  )
114
  with gr.Group():
 
146
 
147
  interface.load(
148
  initial_load,
149
+ inputs=[model_name, game_pgn, board_fen, target, average_over_planes, begin_average_index, end_average_index, plane_index],
150
  outputs=[model, board, gradients, image_board, colorbar],
151
+ concurrency_id="trace_queue"
152
  )
153
  game_pgn.submit(
154
  on_board_change,
155
+ inputs=[model, game_pgn, board_fen, target, average_over_planes, begin_average_index, end_average_index, plane_index],
156
  outputs=[board, gradients, image_board, colorbar],
157
+ concurrency_id="trace_queue"
158
  )
159
  board_fen.submit(
160
  on_board_change,
161
+ inputs=[model, game_pgn, board_fen, target, average_over_planes, begin_average_index, end_average_index, plane_index],
162
  outputs=[board, gradients, image_board, colorbar],
163
+ concurrency_id="trace_queue"
164
  )
165
  model_name.change(
166
  on_model_change,
167
+ inputs=[model_name, board, target, average_over_planes, begin_average_index, end_average_index, plane_index],
168
  outputs=[model, gradients, image_board, colorbar],
169
+ concurrency_id="trace_queue"
170
  )
171
+ target.change(
172
+ on_target_change,
173
+ inputs=[model, board, target, average_over_planes, begin_average_index, end_average_index, plane_index],
174
  outputs=[gradients, image_board, colorbar],
175
+ concurrency_id="trace_queue"
176
  )
177
  for render_arg in [average_over_planes, begin_average_index, end_average_index, plane_index]:
178
  render_arg.change(