fixed pre_slayer slider crashing on changes

This commit is contained in:
Pakobbix 2023-05-22 07:45:06 +02:00
parent ef7e4ed673
commit 39b2f0c54d

View File

@ -373,41 +373,26 @@ class MainWindow(QMainWindow):
self.ram_slider.valueChanged.connect(self.on_ram_slider_changed) self.ram_slider.valueChanged.connect(self.on_ram_slider_changed)
# Pre-layer Slider # Pre-layer Slider
# Check if Nvidia_gpu is enabled, if not, we don't need multiple pre_layer slider. self.pre_layer_labels = []
if nvidia_gpu: self.pre_layer_slider = []
self.pre_layer_labels = [] self.pre_layer_slider_value = []
self.pre_layer_slider = [] self.pre_layer_amount_max = 100
self.pre_layer_slider_value = [] # Don't get confused. With the latest changes, each GPU can have it's own pre_layer value. So we check again gpu_stats for the amount.
self.pre_layer_amount_max = 100 for i, gpu in enumerate(gpu_stats):
# Don't get confused. With the latest changes, each GPU can have it's own pre_layer value. So we check again gpu_stats for the amount. pre_layer_labels = QLabel(f"{gpu.name} Pre_Layer:")
for i, gpu in enumerate(gpu_stats): pre_layer_labels.setToolTip(f"The number of layers to allocate to the GPU.\nSetting this parameter enables CPU offloading for 4-bit models.\nFor multi-gpu, write the numbers separated by spaces, eg --pre_layer 30 60.")
pre_layer_labels = QLabel(f"{gpu.name} Pre_Layer:") layout.addWidget(pre_layer_labels, 11 + (len(gpu_stats) * 2) + i, 0)
pre_layer_labels.setToolTip(f"The number of layers to allocate to the GPU.\nSetting this parameter enables CPU offloading for 4-bit models.\nFor multi-gpu, write the numbers separated by spaces, eg --pre_layer 30 60.") self.pre_layer_labels.append(pre_layer_labels)
layout.addWidget(pre_layer_labels, 11 + (len(gpu_stats) * 2) + i, 0)
self.pre_layer_labels.append(pre_layer_labels)
pre_layer_sliders = QSlider(Qt.Horizontal) pre_layer_sliders = QSlider(Qt.Horizontal)
pre_layer_sliders.setMaximum(100) pre_layer_sliders.setMaximum(100)
pre_layer_sliders.valueChanged.connect(lambda value, idx=i: self.on_pre_layer_slider_changed(value, idx)) pre_layer_sliders.valueChanged.connect(lambda value, idx=i: self.on_pre_layer_slider_changed(value, idx))
layout.addWidget(pre_layer_sliders, 11 + (len(gpu_stats) * 2) + i, 1) layout.addWidget(pre_layer_sliders, 11 + (len(gpu_stats) * 2) + i, 1)
self.pre_layer_slider.append(pre_layer_sliders) self.pre_layer_slider.append(pre_layer_sliders)
pre_layer_sliders_value = QLabel("0") pre_layer_sliders_value = QLabel("0")
layout.addWidget(pre_layer_sliders_value, 11 + (len(gpu_stats) * 2) + i, 2) layout.addWidget(pre_layer_sliders_value, 11 + (len(gpu_stats) * 2) + i, 2)
self.pre_layer_slider_value.append(pre_layer_sliders_value) self.pre_layer_slider_value.append(pre_layer_sliders_value)
else:
self.pre_layer_slider = QSlider(Qt.Horizontal)
self.pre_layer_slider.setMinimum(0)
self.pre_layer_slider.setMaximum(100)
self.pre_layer_slider.setTickInterval(1)
self.pre_layer_slider.setSingleStep(1)
layout.addWidget(QLabel("Pre-layer:"), 11 + len(gpu_stats), 0)
self.pre_layer_slider.setToolTip("The number of layers to allocate to the GPU. Setting this parameter enables CPU offloading for 4-bit models.")
layout.addWidget(self.pre_layer_slider, 11 + len(gpu_stats), 1)
self.pre_layer_slider.valueChanged.connect(self.on_pre_layer_slider_changed)
self.pre_layer_value_label = QLabel("0")
layout.addWidget(self.pre_layer_value_label, 11 + len(gpu_stats), 2)
# Add horizontal line to seperate the Checkboxes # Add horizontal line to seperate the Checkboxes
line = QFrame() line = QFrame()
@ -1285,26 +1270,20 @@ class MainWindow(QMainWindow):
self.ram_value_label.setText(f"{value} GiB") self.ram_value_label.setText(f"{value} GiB")
def on_pre_layer_slider_changed(self, value, idx): def on_pre_layer_slider_changed(self, value, idx):
if nvidia_gpu: # Calculate the current total value of all sliders
# Calculate the current total value of all sliders total_value = sum(slider.value() for slider in self.pre_layer_slider)
total_value = sum(slider.value() for slider in self.pre_layer_slider)
# Check if the total value exceeds the maximum # Check if the total value exceeds the maximum
if total_value > self.pre_layer_amount_max: if total_value > self.pre_layer_amount_max:
# Calculate the maximum allowed value for the current slider # Calculate the maximum allowed value for the current slider
max_allowed_value = self.pre_layer_amount_max - (total_value - value) max_allowed_value = self.pre_layer_amount_max - (total_value - value)
# Adjust the value of the current slider if necessary # Adjust the value of the current slider if necessary
if value > max_allowed_value: if value > max_allowed_value:
self.pre_layer_slider[idx].setValue(max_allowed_value) self.pre_layer_slider[idx].setValue(max_allowed_value)
value = max_allowed_value value = max_allowed_value
else:
# Update the value label with the current value of the pre-layer slider
self.pre_layer_value_label.setText(str(value))
def on_pre_layer_slider_changed(self, value): self.pre_layer_slider_value[idx].setText(str(value))
# Update the value label with the current value of the pre-layer slider
self.pre_layer_value_label.setText(str(value))
def on_vram_slider_changed(self, value, gpu_idx): def on_vram_slider_changed(self, value, gpu_idx):
self.gpu_vram_labels[gpu_idx].setText(f"{value} GiB") self.gpu_vram_labels[gpu_idx].setText(f"{value} GiB")
@ -1396,6 +1375,7 @@ class MainWindow(QMainWindow):
"use_cpu": self.cpu_radio_button.isChecked(), # Save the state of the CPU radio button "use_cpu": self.cpu_radio_button.isChecked(), # Save the state of the CPU radio button
"use_auto": self.auto_radio_button.isChecked(), # Save the state of the auto device radio button "use_auto": self.auto_radio_button.isChecked(), # Save the state of the auto device radio button
"built_in_ram": self.ram_slider.value(), # Save the value of the built-in RAM slider "built_in_ram": self.ram_slider.value(), # Save the value of the built-in RAM slider
#"prelayer": self.pre_layer_value_label.text(), # Saves the Prelayer value
"use_8bit": self.use_8bit_checkbox.isChecked(), # Saves the state of the 8bit checkbox "use_8bit": self.use_8bit_checkbox.isChecked(), # Saves the state of the 8bit checkbox
"no_stream": self.use_nostream_checkbox.isChecked(), # Saves the state of the no_stream checkbox "no_stream": self.use_nostream_checkbox.isChecked(), # Saves the state of the no_stream checkbox
"use_16bit": self.use_16bit_checkbox.isChecked(), # Saves the state of the use_16bit checkbox "use_16bit": self.use_16bit_checkbox.isChecked(), # Saves the state of the use_16bit checkbox
@ -1462,12 +1442,11 @@ class MainWindow(QMainWindow):
"loras": [self.lora_list.item(i).text() for i in range(self.lora_list.count()) if self.lora_list.item(i).checkState() == Qt.Checked] # Saves the chosen loras "loras": [self.lora_list.item(i).text() for i in range(self.lora_list.count()) if self.lora_list.item(i).checkState() == Qt.Checked] # Saves the chosen loras
} }
pre_layer_values = [slider.value() for slider in self.pre_layer_slider]
settings["prelayer"] = pre_layer_values
if nvidia_gpu: if nvidia_gpu:
settings["gpu_vram"] = [slider.value() for slider in self.gpu_vram_sliders] settings["gpu_vram"] = [slider.value() for slider in self.gpu_vram_sliders]
pre_layer_values = [slider.value() for slider in self.pre_layer_slider]
settings["prelayer"] = pre_layer_values
else:
settings["prelayer"] = self.pre_layer_value_label.text()
# Get the text entered in the text field # Get the text entered in the text field
profile_name = self.profile_name_textfield.text() profile_name = self.profile_name_textfield.text()
@ -1655,13 +1634,9 @@ class MainWindow(QMainWindow):
command += f" --gradio-auth-path {self.choose_file_label.text()}" command += f" --gradio-auth-path {self.choose_file_label.text()}"
## Adds the Prelayer selection ## Adds the Prelayer selection
if nvidia_gpu: slider_values = [slider.value() for slider in self.pre_layer_slider]
slider_values = [slider.value() for slider in self.pre_layer_slider] if any(value > 0 for value in slider_values):
if any(value > 0 for value in slider_values): command += f" --pre_layer {' '.join(str(value) for value in slider_values if value > 0)}"
command += f" --pre_layer {' '.join(str(value) for value in slider_values if value > 0)}"
else:
if int(self.pre_layer_value_label.text()) > 0:
command += f" --pre_layer {self.pre_layer_value_label.text()}"
# IF sdp_attention is checked # IF sdp_attention is checked
if self.use_sdp_attention_checkbox.isChecked(): if self.use_sdp_attention_checkbox.isChecked():
@ -1815,16 +1790,14 @@ class MainWindow(QMainWindow):
self.authentication_checkbox.setChecked(settings.get("authentication", False)) self.authentication_checkbox.setChecked(settings.get("authentication", False))
self.choose_file_label.setText(settings.get("authentication_file", "")) self.choose_file_label.setText(settings.get("authentication_file", ""))
self.character_to_load.setCurrentText(settings.get("character", "")) self.character_to_load.setCurrentText(settings.get("character", ""))
#self.pre_layer_slider.setValue(int(settings.get("prelayer", 0)))
self.use_autolaunch_checkbox.setChecked(settings.get("autolaunch", False)) self.use_autolaunch_checkbox.setChecked(settings.get("autolaunch", False))
self.use_network_checkbox.setChecked(settings.get("listen", False)) self.use_network_checkbox.setChecked(settings.get("listen", False))
if nvidia_gpu: if "prelayer" in settings:
if "prelayer" in settings: pre_layer_values = settings["prelayer"]
pre_layer_values = settings["prelayer"] for i, value in enumerate(pre_layer_values):
for i, value in enumerate(pre_layer_values): self.pre_layer_slider[i].setValue(value)
self.pre_layer_slider[i].setValue(value)
else:
self.pre_layer_slider.setValue(int(settings.get("prelayer", 0)))
if nvidia_gpu: if nvidia_gpu:
gpu_vram_settings = settings.get("gpu_vram", []) gpu_vram_settings = settings.get("gpu_vram", [])