Compare commits

2 Commits

Author SHA1 Message Date
carry
7a4388c928 featmodel): 添加保存模式选择功能
在模型管理页面中新增保存模式选择功能,用户可以通过下拉菜单选择不同的保存模式(如默认、合并16位、合并4位等)。同时,将保存模型的逻辑抽离到独立的`save_model.py`文件中,以提高代码的可维护性和复用性。
2025-04-23 14:09:02 +08:00
carry
6338706967 feat: 修改应用启动方式
- 将 app.launch() 修改为 app.launch(server_name="0.0.0.0")
- 此修改使应用能够监听所有网络接口,提高可用性
2025-04-22 19:08:23 +08:00
12 changed files with 60 additions and 464 deletions

24
.gitignore vendored
View File

@@ -33,26 +33,4 @@ unsloth_compiled_cache
# 测试和参考代码
test.ipynb
test.py
refer/
# LaTeX临时文件
*.aux
*.log
*.out
*.toc
*.synctex.gz
*.bbl
*.blg
*.dvi
*.fdb_latexmk
*.fls
*.lof
*.lot
*.idx
*.ilg
*.ind
*.nav
*.snm
*.vrb
*.xdv
*.pdf
refer/

View File

@@ -30,6 +30,11 @@ def model_manage_page():
with gr.Row():
with gr.Column(scale=3):
save_model_name_input = gr.Textbox(label="保存模型名称", placeholder="输入模型保存名称")
save_method_dropdown = gr.Dropdown(
choices=["default", "merged_16bit", "merged_4bit", "lora", "gguf", "gguf_q4_k_m", "gguf_f16"],
label="保存模式",
value="default"
)
with gr.Column(scale=1):
save_button = gr.Button("保存模型", variant="secondary")
@@ -73,21 +78,12 @@ def model_manage_page():
unload_button.click(fn=unload_model, inputs=None, outputs=state_output)
def save_model(save_model_name):
try:
global model, tokenizer
if model is None:
return "没有加载的模型可保存"
save_path = os.path.join(models_dir, save_model_name)
os.makedirs(save_path, exist_ok=True)
model.save_pretrained(save_path)
tokenizer.save_pretrained(save_path)
return f"模型已保存到 {save_path}"
except Exception as e:
return f"保存模型时出错: {str(e)}"
from train.save_model import save_model_to_dir
def save_model(save_model_name, save_method):
return save_model_to_dir(save_model_name, models_dir, get_model(), get_tokenizer(), save_method)
save_button.click(fn=save_model, inputs=save_model_name_input, outputs=state_output)
save_button.click(fn=save_model, inputs=[save_model_name_input, save_method_dropdown], outputs=state_output)
def refresh_model_list():
try:

View File

@@ -26,4 +26,4 @@ if __name__ == "__main__":
with gr.TabItem("设置"):
setting_page()
app.launch()
app.launch(server_name="0.0.0.0")

View File

@@ -1,27 +0,0 @@
\begin{center}
{\zihao{3}\textbf{*************系统设计}}\par
{\zihao{-4}\songti 计算机科学与技术 \quad 专业 \quad 计科211 \quad ************* \par
指导教师:****}
\end{center}
% 中文摘要
\begin{onecolabstract}
\noindent{}{\zihao{4}\textbf{摘要\qquad}}{\songti \zihao{-4}中文摘要内容********
************************************************************
***************************************************************************
*************************************************************
********************************************************
*****************************************************************}\par
\vspace{1ex}
\noindent{}{\zihao{4}\textbf{关键词\qquad}}{\zihao{-4}\songti 关键词1关键词2}\par
\end{onecolabstract}
% 英文摘要
\begin{onecolabstract}
\noindent{}{\zihao{4} \textbf{ABSTRACT\qquad}}{\zihao{-4}abstract in English *************
*******************************************************************************************
*******************************************************************************************
*******************************************************************************************}\par
\end{onecolabstract}

View File

@@ -1,10 +0,0 @@
% 致谢章节
\section*{致谢}
\addcontentsline{toc}{section}{致谢\tiny{\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad}}
***********************************************************************************************************************************************
\par
\vspace{5ex}
\rightline{\zihao{3}{苏伟强\quad\qquad}}
\rightline{二O一九年五月十九日于广州}

View File

@@ -1,8 +0,0 @@
% 结论章节
\section*{结论}
\newcounter{结论编号} %创建一个计数器,这个计数用于给结论章节编号
\setcounter{结论编号}{\value{section}} %计数器就像变量一样
\addtocounter{结论编号}{1}
\addcontentsline{toc}{section}{\arabic{结论编号}\quad 结论\tiny{\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad}}
*****************************************************************

View File

@@ -1,15 +0,0 @@
% 第一章:绪论
\section{绪论}
\subsection{课题背景}
********************************************
\subsection{国内外研究进展情况}
****************************************************
\subsection{本课题的目的及意义}
*************
\subsection{总体研究思路}
******************************************************************************

View File

@@ -1,13 +0,0 @@
% 参考文献章节
\renewcommand\refname{参考文献}
\begin{thebibliography}{0}
\addcontentsline{toc}{section}{参考文献\tiny{\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad.\quad}}
%\bibitem{Butterworth}Butterworth S. On the theory of filter amplifiers[J]. Wireless Engineer, 1930, 7(6): 536-541.
%
\bibitem{数字信号处理教材}程佩青. 数字信号处理教程[M]. 清华大学出版社有限公司, 2001.
%
%\bibitem{信号与系统}陈后金. 信号与系统[M]. 清华大学出版社有限公司, 2003.
%
%\bibitem{数字信号处理教材陈}陈后金. 数字信号处理.2版[M]. 高等教育出版社, 2008.
\end{thebibliography}

View File

@@ -1,189 +0,0 @@
\documentclass[12pt,a4paper]{article}
\usepackage{graphicx}
\usepackage{ctex}
\usepackage{indentfirst}
%\graphicspath{{chapter/}{figures/}}
\usepackage{CJK}
\usepackage{amsmath}%数学
\usepackage{titlesec}
\newcounter{mychapter}
\titleformat{\section}
{\normalfont\Large\bfseries}{\stepcounter{mychapter}\themychapter}{1em}{}
%\usepackage[colorlinks,linkcolor=red]{hyperref}%超链接
\usepackage{fancyhdr} %使用fancyhdr包自定义页眉页脚
%\pagestyle{empty}
\pagestyle{fancy}
%\pagestyle{plain}%没有页眉,页脚放页数
\usepackage{titlesec}%设置章节标题与正文间距为2行
\titlespacing{\section}{0pt}{0pt}{2em}
\usepackage{enumerate}%项目编号
\renewcommand{\figurename}{}%将figure改为图
\usepackage[]{caption2}%去掉图片编号后的":"
\renewcommand{\captionlabeldelim}{}
\renewcommand {\thefigure} {\thesection{}.\arabic{figure}}%图片索引该为按照章节
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\lhead{}
\chead{}
\rhead{}
\lfoot{}
\cfoot{\thepage}
\rfoot{}
\usepackage{booktabs}%表格用
\usepackage{titlesec}%修改标题格式宏包
\titleformat{\section}{\centering\zihao{3}\songti\bfseries}{\arabic{section}.}{0.5em}{}%修改section标题格式
% 设置目录格式为宋体
\renewcommand\contentsname{\songti 目录}
\usepackage{multirow}%跨行表格
\usepackage{abstract}%摘要
\usepackage{setspace} %行间距的宏包
\usepackage{makecell}%表格竖线连续
\def\I{\vrule width1.2pt}
%!\I 就可以代替| 来画表格了
%可固定下划线长度
\makeatletter
\newcommand\dlmu[2][4cm]{\hskip1pt\underline{\hb@xt@ #1{\hss#2\hss}}\hskip3pt}
\makeatother
\usepackage{float}%可以用于禁止浮动体浮动
%目录超链接
\usepackage[colorlinks,linkcolor=black,anchorcolor=blue,citecolor=black]{hyperref}
\usepackage{listings}%可以插入代码
\usepackage{xcolor}%语法高亮支持
%代码格式
\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}
\usepackage{fontspec}
\setmonofont{Consolas}
\lstset{ %
numbers=left,
basicstyle=\tiny\ttfamily,
numberstyle=\tiny,
tabsize=4,
numbersep=5pt,
keywordstyle= \color{blue!70}, %关键词为蓝色
commentstyle=\color{gray}, %注释为灰色
frame=shadowbox, % 框架阴影效果
rulesepcolor= \color{ red!20!green!20!blue!20} ,
escapeinside={\%*}{*)},
xleftmargin=2em, % 边界选项
xrightmargin=2em, % 边界选项
aboveskip=1em, % 边界选项
framexleftmargin=2em, % 边界选项
breaklines,%过长代码自动换行
}
%设置页面格式
\usepackage[left=3.0cm, right=2.6cm, top=2.54cm, bottom=2.54cm]{geometry}
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 封面部分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{titlepage}
% \begin{minipage}[c]{0.75\textwidth}
% \includegraphics[width=0.15\textwidth]{pic//logo//logo.jpg}
%% {\LARGE 机械与电气工程学院}
% \end{minipage}
\begin{figure}[H]
\centering
\includegraphics[scale=0.5]{pic//logo//logo.jpg} %1.png是图片文件的相对路径
\end{figure}
\vspace{0.2cm}
\centering
{\zihao{1}\songti{本科毕业论文(设计)}}
\vspace{2.5cm}
\begin{flushleft}
{{\songti \zihao{-3} \qquad\qquad\qquad 课题名称}\quad{\zihao{-4}\dlmu[7.5cm]{基于文档驱动的自适应编码大模型微调框架}}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad\qquad}\quad\dlmu[7.5cm]{机械与电气工程学院}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad\qquad}\quad\dlmu[7.5cm]{计算机科学与网络工程学院}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad 班级名称}\quad\dlmu[7.5cm]{************* }\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad 学生姓名}\quad\dlmu[7.5cm]{*************}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad\qquad}\quad\dlmu[7.5cm]{*************}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad 指导老师}\quad\dlmu[7.5cm]{*************}\par}
\vspace{0.5cm}
{{\songti\zihao{-3} \qquad\qquad\qquad 完成日期}\quad\dlmu[7.5cm]{\number\year\number\month\number\day}\par}
\end{flushleft}
\vspace{4cm}
{\songti \zihao{3} 教务处制}
\end{titlepage}
\renewcommand{\abstractname}{\scriptsize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 摘要和关键词部分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\input{chapters/abstract}
\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 目录部分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\renewcommand{\contentsname}{\centerline{\zihao{-2}\textbf{目录}}}
\tableofcontents
\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 正文部分
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{
\setlength{\baselineskip}{23pt}
% 引入各章节文件
\newpage
\input{chapters/introduction}
\newpage
\input{chapters/conclusion}
\newpage
\input{chapters/acknowledgement}
\newpage
% 引入参考文献
\input{chapters/references}
}
\end{document}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -1,164 +0,0 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
%%%%%%%%%%%%双并列图片示例
%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\begin{figure}[H]
% \centering
% \begin{minipage}[t]{0,40\textwidth}
% \centering
% \includegraphics[scale=0.5]{ccjg.pdf} %1.png是图片文件的相对路径
% \caption{IEEE 802.11层次结构} %caption是图片的标题
% \label{p_ccjg} %此处的label相当于一个图片的专属标志目的是方便上下文的引用
% \end{minipage}
% \hfil
% \begin{minipage}[t]{0,50\textwidth}
% \centering
% \includegraphics[scale=1]{AODV.pdf} %1.png是图片文件的相对路径
% \caption{AODV示意图} %caption是图片的标题
% \label{p_AODV} %此处的label相当于一个图片的专属标志目的是方便上下文的引用
% \end{minipage}
%\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
%%%%%%%%%%%%表格示例
%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\begin{table}[H]
% \centering
% \caption{802.11a/b/g物理层MAC层参数}
% \begin{tabular}{ccccc}
% \toprule
% & 参数 & 802.11a & 802.11b & 802.11g \\
% \midrule
% \multirow{4}[7]{*}{物理层} & 频带/Hzfreq\_ & $5*10^9$ & $2.4*10^9$ & $2.4*10^9$ \\
% \cmidrule{3-5} & 通信感知范围\cite{bib13}CSThresh\_ & $3.17291*10^9$ & $2.79*10^9$ & $2.79*10^9$ \\
% \cmidrule{3-5} & 可通信范围\cite{bib13}RXThresh\_ & $6.5556*10^{10}$ & $5.76*10^9$ & $5.76*10^9$ \\
% \cmidrule{3-5} & 传输功率/WPt\_ & 0.281838 & 0.281838 & 0.281838 \\
% \midrule
% \multirow{9}[17]{*}{MAC层} & 竞争窗口最小值\cite{bib12}/sCWMin & 15 & 31 & 15 \\
% \cmidrule{3-5} & 竞争窗口最大值\cite{bib12}/sCWMax & 1023 & 1023 & 1023 \\
% \cmidrule{3-5} & 时隙\cite{bib11}/s(SlotTime\_) & 0.00005 & 0.00002 & 0.000009s \\
% \cmidrule{3-5} & SIFS\cite{bib14}\cite{bib11}/s(SIFS\_) & 0.000016 & 0.00001 & 0.000016s \\
% \cmidrule{3-5} & 前导码长度\cite{bib14}(PreambleLength) & 96 & 144 & 120 \\
% \cmidrule{3-5} & PLCP头部长度\cite{bib14}PLCPHeaderLength\_ & 24 & 48 & 24 \\
% \cmidrule{3-5} & PLCP数据率\cite{bib14}/bpsPLCPDataRate\_ & $6*10^6$ & $1*10^6$ & $6*10^6$ \\
% \cmidrule{3-5} & 最高速率\cite{bib14}/bpsdataRate & $5.4*10^7$ & $1.1*10^7$ & $5.4*10^7$ \\
% \cmidrule{3-5} & 最低速率\cite{bib14}/bpsbasicRate\_ & $6*10^6$ & $1*10^6$ & $6*10^6$ \\
% \bottomrule
% \end{tabular}%
% \label{t_abgcs}%
%\end{table}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
%%%%%%%%%%%%插入代码示例
%%%%%%%%%%%%title代码文件标题
%%%%%%%%%%%%language:语言C++,C,MatlabPython
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%插入代码的时候需要知:注释中同时出现标点符号,英文,中文时会互相影响,
%这个时候,在标点符号,英文后面都要追加空格,才能正常显示
%\lstset{language=C++}
%\begin{lstlisting}[title=AODV100.tr]
%
%\end{lstlisting}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
%%%%%%%%%%%%对齐公式示例
%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\begin{align}
% \label{kk}
% k&=\dfrac{3Z_{11}^{'}}{2(1-l^2_2)^{3/2}}\\
% \label{hh}
% h&=\frac{1}{\pi}\left[Z_{00}-\frac{k\pi}{2}+k\arcsin(l_2)+kl_2\sqrt{1-l^2_2} \right]\\
% \label{ll} l&=\frac{1}{2}\left[\sqrt{\frac{5Z_{40}^{'}+3Z^{'}_{20}}{8Z_{20}}}+\sqrt{\frac{5Z_{11}^{'}+Z^{'}_{11}}{6Z_{11}}}\right]\\
% \label{pp}
% \phi&=\arctan\left[\frac{Im[Z_{n1}]}{Re[Z_{n1}]}\right]
%\end{align}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
%%%%%%%%%%%%表格示例2
%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\begin{table}[H]
% \centering
% \caption{NVIDIA$^{\textregistered}$ Jetson TK1配置一览}
% \vspace{0.5cm}
% \begin{tabular}{l}
% \Xhline{1.2pt}
% Tegra K1 SOC \\
% NVIDIA$^{\textregistered}$ Kepler$^{\textregistered}$ GPU、192 个 CUDA 核心 \\
% NVIDIA$^{\textregistered}$ 4-Plus-1™ 四核 ARM$^{\textregistered}$ Cortex™-A15 CPU \\
% 2 GB x16 内存、64 位宽度 \\
% 16 GB 4.51 eMMC 内存 \\
% 1 个 USB 3.0 端口、A \\
% 1 个 USB 2.0 端口、Micro AB\\
% 1 个半迷你 PCIE 插槽\\
% 1 个完整尺寸 SD/MMC 连接器\\
% 1 个 RTL8111GS Realtek 千兆位以太网局域网 \\
% 1 个 SATA 数据端口 \\
% 1 个完整尺寸 HDMI 端口 \\
% 1 个 RS232 串行端口 \\
% SPI 4 兆字节引导闪存\\
% 1 个带 Mic In 和 Line Out 的 ALC5639 Realtek 音频编解码器\\
% 以下信号可通过扩展端口获得:DP/LVDS, Touch SPI 1x4 + 1x1 CSI-2, GPIOs, UART, HSIC, I$^2$C
% \\
% \Xhline{1.2pt}
% \end{tabular}%
% \label{aaa}%
%\end{table}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%
%%%%%%%%%%%%双并列表格示例
%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\begin{table}[H]\footnotesize
% \centering
%
% \begin{minipage}[t]{0,47\textwidth}
% \caption{上位机配置清单}
% \vspace{0.5cm}
% \centering
% \begin{tabular}{cc}
% \Xhline{1.2pt}
% 运行环境 & ubuntu14 (基于Cortex$^{\textregistered}$-A15芯片) \\
% 编程语言 & C/C++ \\
% 第三方库及组件 & GTK2.0OpenCV2.4.10 \\
% 开发环境 & Qt Creator 与 make工程管理器 \\
% 编译工具链 & NVIDIA$^{\textregistered}$-ARM$^{\textregistered}$编译工具链 \\
% 程序结构 & 模块化结构 \\
% \Xhline{1.2pt}
% \end{tabular}%
%
% \label{pzqd}%
% \end{minipage}
% \hfil
% \hfil
% \begin{minipage}[t]{0,47\textwidth}
% \centering
% \caption{上位机功能清单}
% \vspace{0.5cm}
% \begin{tabular}{cc}
% \Xhline{1.2pt}
% 编号 & \multicolumn{1}{c}{功能描述} \\
% \Xhline{1.2pt}
% 1 & \multicolumn{1}{c}{可打开/关闭摄像头} \\
% 2 & 可通过摄像头捕获图片为目标图片 \\
% 3 & 可从文件系统内选择图片并载入为目标图片 \\
% 4 & 可以检测目标图片中圆形轮廓的半径和圆心 \\
% 5 & 可以检测目标图片中平行直线的间距 \\
% 6 & 检测算法的参数可自由调整 \\
% \Xhline{1.2pt}
% \end{tabular}%
% \label{gn}%
% \end{minipage}
%\end{table}%

48
train/save_model.py Normal file
View File

@@ -0,0 +1,48 @@
import os
from global_var import get_model, get_tokenizer
def save_model_to_dir(save_model_name, models_dir, model, tokenizer, save_method="default"):
"""
保存模型到指定目录
:param save_model_name: 要保存的模型名称
:param models_dir: 模型保存的基础目录
:param model: 要保存的模型
:param tokenizer: 要保存的tokenizer
:param save_method: 保存模式选项
- "default": 默认保存方式
- "merged_16bit": 合并为16位
- "merged_4bit": 合并为4位
- "lora": 仅LoRA适配器
- "gguf": 保存为GGUF格式
- "gguf_q4_k_m": 保存为q4_k_m GGUF格式
- "gguf_f16": 保存为16位GGUF格式
:return: 保存结果消息或错误信息
"""
try:
if model is None:
return "没有加载的模型可保存"
save_path = os.path.join(models_dir, save_model_name)
os.makedirs(save_path, exist_ok=True)
if save_method == "default":
model.save_pretrained(save_path)
tokenizer.save_pretrained(save_path)
elif save_method == "merged_16bit":
model.save_pretrained_merged(save_path, tokenizer, save_method="merged_16bit")
elif save_method == "merged_4bit":
model.save_pretrained_merged(save_path, tokenizer, save_method="merged_4bit_forced")
elif save_method == "lora":
model.save_pretrained_merged(save_path, tokenizer, save_method="lora")
elif save_method == "gguf":
model.save_pretrained_gguf(save_path, tokenizer)
elif save_method == "gguf_q4_k_m":
model.save_pretrained_gguf(save_path, tokenizer, quantization_method="q4_k_m")
elif save_method == "gguf_f16":
model.save_pretrained_gguf(save_path, tokenizer, quantization_method="f16")
else:
return f"不支持的保存模式: {save_method}"
return f"模型已保存到 {save_path} (模式: {save_method})"
except Exception as e:
return f"保存模型时出错: {str(e)}"