You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

show.tmpl 42 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  1. {{template "base/head" .}}
  2. <div id="mask">
  3. <div id="loadingPage">
  4. <div class="rect1"></div>
  5. <div class="rect2"></div>
  6. <div class="rect3"></div>
  7. <div class="rect4"></div>
  8. <div class="rect5"></div>
  9. </div>
  10. </div>
  11. <div class="repository">
  12. {{template "repo/header" .}}
  13. <div class="ui container">
  14. <h4 class="ui header" id="vertical-segment">
  15. <div class="ui breadcrumb">
  16. <a class="section" href="{{.RepoLink}}/debugjob?debugListType=all">
  17. {{$.i18n.Tr "repo.cloudbrain"}}
  18. </a>
  19. <div class="divider"> / </div>
  20. <a class="section" href="{{$.RepoLink}}/cloudbrain/benchmark">
  21. {{$.i18n.Tr "repo.modelarts.evaluate_job"}}
  22. </a>
  23. <div class="divider"> / </div>
  24. <div class="active section" vfield="DisplayJobName"></div>
  25. </div>
  26. </h4>
  27. <div class="ui accordion border-according" id="accordion" data-repopath="{{$.RepoRelPath}}/cloudbrain" data-jobid="" vdatajobid="ID" data-version="">
  28. <input type="hidden" id="jobId_input" name="jobId_input" value="" vvalue="JobID">
  29. <div class="active title padding0">
  30. <div class="according-panel-heading">
  31. <div class="accordion-panel-title">
  32. <i class="dropdown icon"></i>
  33. <span class="accordion-panel-title-content">
  34. <span>
  35. <div class="ac-display-inblock title_text acc-margin-bottom">
  36. <span class="cti-mgRight-sm">
  37. <span vtime="CreatedUnix"></span>
  38. </span>
  39. <span class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.status"}}:
  40. <span id="-status-span">
  41. <i id="icon" style="vertical-align: middle;" class="{{.Status}}" vclass="Status"></i>
  42. <span id="text" style="margin-left: 0.4em;font-size: 12px;" vfield="Status"></span>
  43. </span>
  44. </span>
  45. <span class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.train_job.dura_time"}}:</span>
  46. <span class="cti-mgRight-sm uc-accordionTitle-black" id="-duration-span" vfield="TrainJobDuration"></span>
  47. </div>
  48. </span>
  49. </span>
  50. </div>
  51. </div>
  52. </div>
  53. <div class="active content">
  54. <div class="content-pad">
  55. <div class="ui pointing secondary menu" style="border-bottom: 1px solid rgba(34,36,38,.15);">
  56. <a class="active item" data-tab="first0">{{$.i18n.Tr "repo.modelarts.train_job.config"}}</a>
  57. <a class="item log_bottom" data-tab="second0" data-version="">{{$.i18n.Tr "repo.modelarts.log"}}</a>
  58. <a class="item" data-tab="third0" data-version="">{{.i18n.Tr "modelsafety.evaluation_result"}}</a>
  59. </div>
  60. <div class="ui tab active" data-tab="first0">
  61. <div style="padding-top: 10px;">
  62. <div class="tab_2_content">
  63. <div class="ac-grid ac-grid-col2">
  64. <div class="ac-grid-col">
  65. <table class="ti-form">
  66. <tbody class="ti-text-form">
  67. <tr class="ti-no-ng-animate">
  68. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  69. {{$.i18n.Tr "repo.cloudbrain_task"}}
  70. </td>
  71. <td class="ti-text-form-content">
  72. <div class="text-span text-span-w" vfield="DisplayJobName"></div>
  73. </td>
  74. </tr>
  75. <tr class="ti-no-ng-animate">
  76. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  77. {{$.i18n.Tr "repo.modelarts.status"}}
  78. </td>
  79. <td class="ti-text-form-content">
  80. <div class="text-span text-span-w" id="-status" vfield="Status"></div>
  81. </td>
  82. </tr>
  83. <tr class="ti-no-ng-animate">
  84. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  85. {{$.i18n.Tr "repo.modelarts.createtime"}}
  86. </td>
  87. <td class="ti-text-form-content">
  88. <div class="text-span text-span-w">
  89. <span style="font-size: 12px;" class="v-field" vtime="CreatedUnix"></span>
  90. </div>
  91. </td>
  92. </tr>
  93. <tr class="ti-no-ng-animate">
  94. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  95. {{$.i18n.Tr "repo.cloudbrain.time.starttime"}}
  96. </td>
  97. <td class="ti-text-form-content">
  98. <div class="text-span text-span-w v-field" vtime="StartTime" id="-startTime"></div>
  99. </td>
  100. </tr>
  101. <tr class="ti-no-ng-animate">
  102. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  103. {{$.i18n.Tr "repo.cloudbrain.time.endtime"}}
  104. </td>
  105. <td class="ti-text-form-content">
  106. <div class="text-span text-span-w v-field" vtime="EndTime" id="-EndTime"></div>
  107. </td>
  108. </tr>
  109. <tr class="ti-no-ng-animate">
  110. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  111. {{$.i18n.Tr "repo.modelarts.train_job.dura_time"}}
  112. </td>
  113. <td class="ti-text-form-content">
  114. <div class="text-span text-span-w" vfield="TrainJobDuration" id="-duration"></div>
  115. </td>
  116. </tr>
  117. <tr class="ti-no-ng-animate">
  118. <td class="ti-no-ng-animate ti-text-form-label text-width80" vimagetitle="Image">
  119. <span style="display:none;">{{$.i18n.Tr "cloudbrain.mirror"}}</span>
  120. <span style="display:none;">{{$.i18n.Tr "repo.modelarts.train_job.AI_driver"}}</span>
  121. </td>
  122. <td class="ti-text-form-content">
  123. <div class="text-span text-span-w" id="-mirror">
  124. <span class="ui poping up clipboard" data-position="top center" id="clipboard-btn" style="cursor:pointer"
  125. data-clipboard-text="{{.Image}}"
  126. data-success="{{$.i18n.Tr "repo.copied"}}"
  127. data-error="{{$.i18n.Tr "repo.copied_error"}}"
  128. data-content="{{$.i18n.Tr "repo.copy"}}"
  129. data-variation="inverted tiny"
  130. vdataclipboardtext="Image"
  131. >
  132. <span vtitle="Image" vimage="Image" ></span></span>
  133. </div>
  134. </td>
  135. </tr>
  136. <tr class="ti-no-ng-animate">
  137. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  138. {{$.i18n.Tr "repo.cloudbrain.benchmark.evaluate_scenes"}}
  139. </td>
  140. <td class="ti-text-form-content">
  141. <div class="text-span text-span-w" vfield="BenchmarkType"></div>
  142. </td>
  143. </tr>
  144. <tr class="ti-no-ng-animate">
  145. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  146. {{$.i18n.Tr "repo.cloudbrain.benchmark.evaluate_type"}}
  147. </td>
  148. <td class="ti-text-form-content">
  149. <div class="text-span text-span-w" vfield="BenchmarkTypeName"></div>
  150. </td>
  151. </tr>
  152. <tr class="ti-no-ng-animate">
  153. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  154. {{.i18n.Tr "modelsafety.base_data_set"}}
  155. </td>
  156. <td class="ti-text-form-content">
  157. <div class="text-span text-span-w" vdataset0="DatasetName"></div>
  158. </td>
  159. </tr>
  160. <tr class="ti-no-ng-animate">
  161. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  162. {{.i18n.Tr "modelsafety.combat_data_set"}}
  163. </td>
  164. <td class="ti-text-form-content">
  165. <div class="text-span text-span-w" vdataset1="DatasetName"></div>
  166. </td>
  167. </tr>
  168. <tr class="ti-no-ng-animate">
  169. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  170. {{$.i18n.Tr "repo.modelarts.train_job.run_parameter"}}
  171. </td>
  172. <td class="ti-text-form-content">
  173. <div class="text-span text-span-w" vtitle="Parameters" vfield="Parameters"></div>
  174. </td>
  175. </tr>
  176. </tbody>
  177. </table>
  178. </div>
  179. <div class="ac-grid-col">
  180. <table class="ti-form">
  181. <tbody class="ti-text-form">
  182. <tr class="ti-no-ng-animate">
  183. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  184. {{$.i18n.Tr "repo.modelarts.code_version"}}
  185. </td>
  186. <td class="ti-text-form-content">
  187. <div class="text-span text-span-w" vfield="BranchName"></div>
  188. </td>
  189. </tr>
  190. <tr class="ti-no-ng-animate">
  191. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  192. {{$.i18n.Tr "repo.modelarts.train_job.description"}}
  193. </td>
  194. <td class="ti-text-form-content">
  195. <div class="text-span text-span-w" vtitle="Description" vfield="Description"></div>
  196. </td>
  197. </tr>
  198. <tr class="ti-no-ng-animate">
  199. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  200. <span>{{$.i18n.Tr "repo.modelarts.train_job.resource_type"}}</span>
  201. </td>
  202. <td class="ti-text-form-content resorce_type">
  203. <div class="text-span text-span-w"></div>
  204. </td>
  205. </tr>
  206. <tr class="ti-no-ng-animate">
  207. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  208. {{$.i18n.Tr "repo.modelarts.train_job.standard"}}
  209. </td>
  210. <td class="ti-text-form-content spec">
  211. <div class="text-span text-span-w"></div>
  212. </td>
  213. </tr>
  214. <tr class="ti-no-ng-animate">
  215. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  216. {{$.i18n.Tr "repo.modelarts.model_name"}}
  217. </td>
  218. <td class="ti-text-form-content">
  219. <div class="text-span text-span-w" vfield="ModelName"></div>
  220. </td>
  221. </tr>
  222. <tr class="ti-no-ng-animate">
  223. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  224. {{$.i18n.Tr "repo.modelconvert.modelversion"}}
  225. </td>
  226. <td class="ti-text-form-content">
  227. <div class="text-span text-span-w" vfield="ModelVersion"></div>
  228. </td>
  229. </tr>
  230. <tr class="ti-no-ng-animate">
  231. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  232. {{$.i18n.Tr "repo.modelarts.infer_job_model_file"}}
  233. </td>
  234. <td class="ti-text-form-content">
  235. <div class="text-span text-span-w" vfield="CkptName"></div>
  236. </td>
  237. </tr>
  238. <tr class="ti-no-ng-animate">
  239. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  240. {{$.i18n.Tr "repo.cloudbrain_creator"}}
  241. </td>
  242. <td class="ti-text-form-content">
  243. <div class="text-span text-span-w" id="-mirror" vuser="User.Name"></div>
  244. </td>
  245. </tr>
  246. <tr class="ti-no-ng-animate">
  247. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  248. {{$.i18n.Tr "repo.modelarts.train_job.start_file"}}
  249. </td>
  250. <td class="ti-text-form-content">
  251. <div class="text-span text-span-w" vfield="BootFile"></div>
  252. </td>
  253. </tr>
  254. <tr class="ti-no-ng-animate">
  255. <td class="ti-no-ng-animate ti-text-form-label text-width80">
  256. {{.i18n.Tr "modelsafety.evaluation_indicators"}}
  257. </td>
  258. <td class="ti-text-form-content">
  259. <div class="text-span text-span-w" vfield="LabelName"></div>
  260. </td>
  261. </tr>
  262. </tbody>
  263. </table>
  264. </div>
  265. </div>
  266. </div>
  267. <div style="clear: both;"></div>
  268. </div>
  269. </div>
  270. <div class="ui tab" data-tab="second0">
  271. <div class="file-info">
  272. <a id="-log-down"
  273. class='{{if $.canDownload}}ti-download-file{{else}}disabled{{end}} file-info'
  274. href="/api/v1/repos/{{$.RepoRelPath}}/cloudbrain">
  275. <i class="ri-download-cloud-2-line"></i>
  276. <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span>
  277. </a>
  278. <div class="file-info full-log-dialog" data-version="{{.VersionName}}" data-log="{{$.i18n.Tr "repo.modelarts.log_file"}}"
  279. data-exit="{{$.i18n.Tr "repo.modelarts.exit_full_screen"}}" style="margin-left: 1rem;color:#0366d6;cursor: pointer;"
  280. data-log-down="{{$.i18n.Tr "repo.modelarts.download_log"}}" data-href="/api/v1/repos/{{$.RepoRelPath}}/cloudbrain"
  281. data-scroll-top="{{$.i18n.Tr "repo.log_scroll_start"}}" data-scroll-bottom="{{$.i18n.Tr "repo.log_scroll_end"}}">
  282. <i class="ri-aspect-ratio-line"></i>
  283. <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.fullscreen_log_file"}}</span>
  284. </div>
  285. </div>
  286. <div
  287. style="position: relative;border: 1px solid rgba(0,0,0,.2);padding: 0 10px;margin-top: 10px;">
  288. <span>
  289. <a title="{{$.i18n.Tr "repo.log_scroll_start"}}" style="position: absolute; right: -32px;cursor: pointer;"
  290. class="log_top" data-version=""><i class="icon-to-top"></i></a>
  291. </span>
  292. <span class="log-info-">
  293. <a title="{{$.i18n.Tr "repo.log_scroll_end"}}" style="position: absolute; bottom: 10px;right: -32px;cursor: pointer;"
  294. class="log_bottom" data-version=""><i
  295. class="icon-to-bottom"></i></a>
  296. </span>
  297. <div class="ui message message" style="display: none;">
  298. <div id="header"></div>
  299. </div>
  300. <div class="ui attached log log-scroll" id="log" data-version=""
  301. style="height: 300px !important; overflow: auto;">
  302. <div class="ui inverted active dimmer">
  303. <div class="ui loader"></div>
  304. </div>
  305. <input type="hidden" name="end_line" value>
  306. <input type="hidden" name="end_line-max" value>
  307. <input type="hidden" name="start_line-max" value>
  308. <input type="hidden" name="start_line-max-copy" value>
  309. <input type="hidden" name="start_line" value>
  310. <input type="hidden" name="init_log" value>
  311. <pre id="log_file"></pre>
  312. </div>
  313. </div>
  314. </div>
  315. <div class="ui tab" data-tab="third0">
  316. <style>
  317. .__res_item {
  318. margin-bottom: 20px;
  319. }
  320. .__res_title {
  321. height: 50px;
  322. display: flex;
  323. align-items: center;
  324. margin-bottom: 10px;
  325. }
  326. .__res_title_icon {
  327. height: 48px;
  328. width: 48px;
  329. margin-right: 8px;
  330. }
  331. .bNIWIE.fill:not([stroke]) {
  332. fill: rgb(105, 192, 255);
  333. }
  334. .bNIWIE.fill:not([fill]) {
  335. fill: rgb(105, 192, 255);
  336. }
  337. .__res_title_txt {
  338. font-family: SourceHanSansSC;
  339. font-size: 14px;
  340. font-style: normal;
  341. line-height: 20px;
  342. text-decoration: none;
  343. }
  344. .__res_title_txt1 {
  345. font-weight: 700;
  346. color: rgb(3, 102, 214);
  347. }
  348. .__res_title_txt2 {
  349. font-weight: 300;
  350. color: rgba(136,136,136,1);
  351. }
  352. .__res_table_container {
  353. overflow-x: auto;
  354. }
  355. .__res_table_container table {
  356. border-bottom-left-radius: 0 !important;
  357. border-bottom-right-radius: 0 !important;
  358. }
  359. .__res_table_container th, .__res_table_container td {
  360. text-align: center !important;
  361. }
  362. .__res_chart_container {
  363. height:280px;
  364. border: 1px solid rgba(34,36,38,.1);
  365. margin-top: -1px;
  366. border-bottom-left-radius: .28571429rem;
  367. border-bottom-right-radius: .28571429rem;
  368. }
  369. .__res_no_data {
  370. height: 200px;
  371. display: flex;
  372. justify-content: center;
  373. align-items: center;
  374. }
  375. </style>
  376. <div style="display:none;">
  377. {{template "repo/modelsafety/indicators_descr".}}
  378. </div>
  379. <div class="__res_container">
  380. <div class="__res_no_data">{{.i18n.Tr "modelsafety.no_data"}}</div>
  381. </div>
  382. </div>
  383. </div>
  384. </div>
  385. </div>
  386. {{template "custom/max_log" .}}
  387. {{template "base/paginate" .}}
  388. </div>
  389. <!-- 确认模态框 -->
  390. <div id="deletemodel">
  391. <div class="ui basic modal">
  392. <div class="ui icon header">
  393. <i class="trash icon"></i> {{$.i18n.Tr "cloudbrain.delete_task"}}
  394. </div>
  395. <div class="content">
  396. <p>{{$.i18n.Tr "cloudbrain.task_delete_confirm"}}</p>
  397. </div>
  398. <div class="actions">
  399. <div class="ui red basic inverted cancel button">
  400. <i class="remove icon"></i> {{$.i18n.Tr "cloudbrain.operate_cancel"}}
  401. </div>
  402. <div class="ui green basic inverted ok button">
  403. <i class="checkmark icon"></i> {{$.i18n.Tr "cloudbrain.operate_confirm"}}
  404. </div>
  405. </div>
  406. </div>
  407. </div>
  408. </div>
  409. {{template "base/footer" .}}
  410. <script src="{{StaticUrlPrefix}}/js/specsuse.js?v={{MD5 AppVer}}" type="text/javascript"></script>
  411. <script>
  412. ;(function() {
  413. function paddingZeros(str, len) {
  414. str = str.toString();
  415. if (str.length < len) {
  416. str = new Array(len - str.length).fill('0').join('') + str;
  417. }
  418. return str;
  419. }
  420. function timeFormat(date) {
  421. return `${date.getFullYear()}-${paddingZeros(date.getMonth() + 1, 2)}-${paddingZeros(date.getDate(), 2)} ${paddingZeros(date.getHours(), 2)}:${paddingZeros(date.getMinutes(), 2)}:${paddingZeros(date.getSeconds(), 2)}`;
  422. }
  423. function initTable(tableEl, data) {
  424. tableEl.empty();
  425. var lanUntargetted = {{.i18n.Tr "modelsafety.untargetted"}};
  426. var lanTargetted = {{.i18n.Tr "modelsafety.targetted"}};
  427. if (data.indicator === 'ALDp') {
  428. tableEl.append(`
  429. <table class="ui celled table">
  430. <thead>
  431. <tr class="tr-head"><th colspan="2" style="width:100px;">${data.indicator}</th></tr>
  432. </thead>
  433. <tbody>
  434. <tr class="tr-untargetted"><td rowspan="3">${lanUntargetted}</td><td>L_0 norm</td></tr>
  435. <tr class="tr-untargetted"><td style="border-left: 1px solid rgba(34,36,38,.1);">L_2 norm</td></tr>
  436. <tr class="tr-untargetted"><td style="border-left: 1px solid rgba(34,36,38,.1);">L_inf norm</td></tr>
  437. <tr class="tr-targetted"><td rowspan="3">${lanTargetted}</td><td>L_0 norm</td></tr>
  438. <tr class="tr-targetted"><td style="border-left: 1px solid rgba(34,36,38,.1);">L_2 norm</td></tr>
  439. <tr class="tr-targetted"><td style="border-left: 1px solid rgba(34,36,38,.1);">L_inf norm</td></tr>
  440. </tbody>
  441. </table>`);
  442. var trHead = tableEl.find('tr.tr-head');
  443. var trUntargetted = tableEl.find('tr.tr-untargetted');
  444. var trTargetted = tableEl.find('tr.tr-targetted');
  445. for (var i = 0, iLen = data.params.length; i < iLen; i++) {
  446. var params = data.params;
  447. var untargetted = data.untargetted;
  448. var targetted = data.targetted;
  449. trHead.append(`<th>param(${params[i]})</th>`);
  450. trUntargetted.eq(0).append(`<td>${Number(untargetted[i][0]).toFixed(3)}</td>`);
  451. trUntargetted.eq(1).append(`<td>${Number(untargetted[i][1]).toFixed(3)}</td>`);
  452. trUntargetted.eq(2).append(`<td>${Number(untargetted[i][2]).toFixed(3)}</td>`);
  453. trTargetted.eq(0).append(`<td>${Number(targetted[i][0]).toFixed(3)}</td>`);
  454. trTargetted.eq(1).append(`<td>${Number(targetted[i][1]).toFixed(3)}</td>`);
  455. trTargetted.eq(2).append(`<td>${Number(targetted[i][2]).toFixed(3)}</td>`);
  456. }
  457. } else {
  458. tableEl.append(`
  459. <table class="ui celled table">
  460. <thead>
  461. <tr class="tr-head"><th style="width:100px;">${data.indicator}</th></tr>
  462. </thead>
  463. <tbody>
  464. <tr class="tr-untargetted"><td>{{.i18n.Tr "modelsafety.untargetted"}}</td></tr>
  465. <tr class="tr-targetted"><td>{{.i18n.Tr "modelsafety.targetted"}}</td></tr>
  466. </tbody>
  467. </table>`);
  468. var trHead = tableEl.find('tr.tr-head');
  469. var trUntargetted = tableEl.find('tr.tr-untargetted');
  470. var trTargetted = tableEl.find('tr.tr-targetted');
  471. for (var i = 0, iLen = data.params.length; i < iLen; i++) {
  472. var params = data.params;
  473. var untargetted = data.untargetted;
  474. var targetted = data.targetted;
  475. trHead.append(`<th>param(${params[i]})</th>`);
  476. trUntargetted.append(`<td>${Number(untargetted[i]).toFixed(3)}</td>`);
  477. trTargetted.append(`<td>${Number(targetted[i]).toFixed(3)}</td>`);
  478. }
  479. }
  480. }
  481. function initChart(chartEl, data) {
  482. var chartHandle = chartEl.data('chart');
  483. chartHandle && chartHandle.dispose();
  484. chartHandle && window.removeEventListener('resize', chartHandle.resize);
  485. chartHandle = echarts.init(chartEl[0]);
  486. chartEl.data('chart', chartHandle);
  487. var lanUntargetted = {{.i18n.Tr "modelsafety.untargetted"}};
  488. var lanTargetted = {{.i18n.Tr "modelsafety.targetted"}};
  489. var option = {
  490. tooltip: {
  491. trigger: 'axis'
  492. },
  493. color: ['rgb(80, 135, 236)', 'rgb(104, 187, 196)'],
  494. legend: {
  495. data: [lanUntargetted, lanTargetted],
  496. top: '15',
  497. },
  498. grid: {
  499. top: '50',
  500. left: '20',
  501. right: '20',
  502. bottom: '20',
  503. containLabel: true
  504. },
  505. xAxis: {
  506. type: 'category',
  507. data: data.params.map(function(item){ return `param(${item})`}),
  508. },
  509. yAxis: {
  510. type: 'value'
  511. },
  512. series: [
  513. {
  514. name: lanUntargetted,
  515. type: 'line',
  516. data: (data.untargetted || []).map(function(item){ return Number(Number(item).toFixed(3)) }),
  517. },
  518. {
  519. name: lanTargetted,
  520. type: 'line',
  521. data: (data.targetted || []).map(function(item){ return Number(Number(item).toFixed(3)) }),
  522. }
  523. ]
  524. };
  525. if (data.indicator === 'ALDp') {
  526. option.color = ['rgb(80, 135, 236)', 'rgb(247, 238, 209)', 'rgb(231, 230, 238)', 'rgb(104, 187, 196)', 'rgb(211, 183, 136)', 'rgb(159, 131, 179)'];
  527. option.legend.data = [`${lanUntargetted}(L_0)`, `${lanUntargetted}(L_2)`, `${lanUntargetted}(L_inf)`,
  528. `${lanTargetted}(L_0)`, `${lanTargetted}(L_2)`, `${lanTargetted}(L_inf)`];
  529. option.series = [
  530. {
  531. name: `${lanUntargetted}(L_0)`,
  532. type: 'line',
  533. data: (data.untargetted || []).map(function(item){ return Number(item[0].toFixed(3)) }),
  534. },
  535. {
  536. name: `${lanUntargetted}(L_2)`,
  537. type: 'line',
  538. data: (data.untargetted || []).map(function(item){ return Number(item[1].toFixed(3)) }),
  539. },
  540. {
  541. name: `${lanUntargetted}(L_inf)`,
  542. type: 'line',
  543. data: (data.untargetted || []).map(function(item){ return Number(item[2].toFixed(3)) }),
  544. },
  545. {
  546. name: `${lanTargetted}(L_0)`,
  547. type: 'line',
  548. data: (data.targetted || []).map(function(item){ return Number(item[0].toFixed(3)) }),
  549. },
  550. {
  551. name: `${lanTargetted}(L_2)`,
  552. type: 'line',
  553. data: (data.targetted || []).map(function(item){ return Number(item[1].toFixed(3)) }),
  554. },
  555. {
  556. name: `${lanTargetted}(L_inf)`,
  557. type: 'line',
  558. data: (data.targetted || []).map(function(item){ return Number(item[2].toFixed(3)) }),
  559. }
  560. ];
  561. }
  562. chartHandle.setOption(option);
  563. window.addEventListener('resize', chartHandle.resize);
  564. }
  565. function initResItems(list) {
  566. var resContainer = $('.__res_container');
  567. resContainer.empty();
  568. for (var i = 0, iLen = list.length; i < iLen; i++) {
  569. var item = list[i], indicator = item.indicator;
  570. var descr = $(`[indicator="${indicator}"]`).text();
  571. var resItemContainer = $(`<div class="__res_item">
  572. <div class="__res_title">
  573. <div class="__res_title_icon">
  574. <svg xmlns="http://www.w3.org/2000/svg" class="styles__StyledSVGIconPathComponent-sc-16fsqc8-0 bNIWIE svg-icon-path-icon fill" viewBox="0 0 32 32" width="48" height="48"><defs data-reactroot=""></defs><g><path d="M8.155 26.783c-3.342-2.449-5.488-6.36-5.488-10.771 0-0.004 0-0.008 0-0.012v0.001c0-7.364 5.969-13.333 13.333-13.333s13.333 5.969 13.333 13.333c0 0.003 0 0.007 0 0.011 0 4.412-2.146 8.323-5.451 10.745l-0.037 0.026-1.353-2.319c2.549-1.969 4.175-5.026 4.175-8.464 0-5.891-4.776-10.667-10.667-10.667s-10.667 4.776-10.667 10.667c0 3.437 1.626 6.494 4.15 8.445l0.025 0.018-1.353 2.319zM10.867 22.136c-1.758-1.477-2.867-3.677-2.867-6.136 0-4.418 3.582-8 8-8s8 3.582 8 8c0 2.459-1.109 4.658-2.854 6.126l-0.012 0.010-1.373-2.355c0.972-0.966 1.573-2.304 1.573-3.782 0-2.946-2.388-5.333-5.333-5.333s-5.333 2.388-5.333 5.333c0 1.478 0.601 2.816 1.573 3.782l0 0-1.373 2.355zM14.667 17.333h2.667v12h-2.667v-12z"></path></g></svg>
  575. </div>
  576. <div class="__res_title_txt">
  577. <div class="__res_title_txt1">${indicator}-${item.name}</div>
  578. <div class="__res_title_txt2">${descr}</div>
  579. </div>
  580. </div>
  581. <div class="__res_table_container"></div>
  582. <div class="__res_chart_container"></div>
  583. </div>`);
  584. resContainer.append(resItemContainer);
  585. initTable(resItemContainer.find('.__res_table_container'), item);
  586. initChart(resItemContainer.find('.__res_chart_container'), item);
  587. }
  588. };
  589. function initResTab(data) {
  590. var name = data.name;
  591. var params = data.params;
  592. var indicators = Object.keys(data.targetted);
  593. var list = [];
  594. for (var i = 0, iLen = indicators.length; i < iLen; i++) {
  595. var indicator = indicators[i];
  596. var obj = {
  597. name: name,
  598. params: params.flat(),
  599. indicator: indicator,
  600. targetted: data.targetted[indicator]['targets'],
  601. untargetted: data.untargetted[indicator],
  602. };
  603. list.push(obj);
  604. }
  605. initResItems(list);
  606. }
  607. var resultData;
  608. function initData() {
  609. $.ajax({
  610. url: window.location.href.replace('cloudbrain/benchmark', 'modelsafety'),
  611. type: "get",
  612. data: {},
  613. contentType: "application/json; charset=utf-8",
  614. success(res) {
  615. for (var key in res) {
  616. $(`[vfield="${key}"]`).text(res[key]);
  617. $(`[vclass="${key}"]`).addClass(res[key]);
  618. $(`[vtime="${key}"]`).text(res[key] ? timeFormat(new Date(res[key] * 1000)) : '--');
  619. $(`[vtitle="${key}"]`).attr('title', res[key]);
  620. $(`[vdataset0="${key}"]`).text(res[key] ? res[key].toString().split(';')[0] : '');
  621. $(`[vdataset1="${key}"]`).text(res[key] ? res[key].toString().split(';')[1] : '');
  622. $(`[vvalue="${key}"]`).val(res[key]);
  623. $(`[vdatajobid="${key}"]`).attr('data-jobid', res[key]);
  624. }
  625. $(`[vfield="Description"]`).text(res['Description'] || '--');
  626. $(`[vfield="Parameters"]`).text(res['Parameters'] || '--');
  627. $(`[vfield="BranchName"]`).html(res['BranchName'] + '<span style="margin-left:1rem" class="ui label">' + res['CommitID'].slice(0, 10) + '</span>');
  628. var imageName = res['Image'] || res['EngineName'];
  629. $(`[vimagetitle="Image"] span`).hide();
  630. if (res.Type === 0) {
  631. imageName = res['Image'];
  632. $(`[vimagetitle="Image"] span`).eq(0).show();
  633. } else {
  634. imageName = res['EngineName'];
  635. $(`[vimagetitle="Image"] span`).eq(1).show();
  636. }
  637. $(`[vdataclipboardtext="Image"]`).attr('data-clipboard-text', imageName);
  638. $(`[vimage="Image"]`).text(imageName);
  639. $(`[vtitle="Image"]`).attr('title', imageName);
  640. $(`[vuser="User.Name"]`).text(res['User'] && res['User']['Name']);
  641. if (res.Spec) {
  642. var SPEC = res.Spec;
  643. var showPoint = false;
  644. var specStr = window.renderSpecStr(SPEC, showPoint, {
  645. gpu_memory: {{$.i18n.Tr "cloudbrain.gpu_memory"}},
  646. free: {{$.i18n.Tr "cloudbrain.free"}},
  647. point_hr: {{$.i18n.Tr "cloudbrain.point_hr"}},
  648. memory: {{$.i18n.Tr "cloudbrain.memory"}},
  649. shared_memory: {{$.i18n.Tr "cloudbrain.shared_memory"}},
  650. });
  651. $('td.ti-text-form-content.spec div').text(specStr);
  652. SPEC && $('td.ti-text-form-content.resorce_type div').text(getListValueWithKey(ACC_CARD_TYPE, SPEC.AccCardType));
  653. }
  654. var repoPath = {{$.RepoRelPath}};
  655. var oLogHref = `/api/v1/repos/${repoPath}/cloudbrain`;
  656. $('#-log-down').attr('href', oLogHref + `/${res.ID}/download_log_file`);
  657. $('.full-log-dialog').attr('data-href', oLogHref + `/${res.ID}/download_log_file`);
  658. if (res.ResultJson) {
  659. try {
  660. resultData = JSON.parse(res.ResultJson);
  661. } catch(e) {
  662. resultData = res.ResultJson;
  663. }
  664. }
  665. },
  666. error(err) {
  667. console.log(err);
  668. },
  669. });
  670. }
  671. initData();
  672. $(document).ready(function () {
  673. $('.ui.accordion').accordion({ selector: { trigger: '.icon' } });
  674. });
  675. $('.pointing.secondary.menu .item').tab({
  676. onVisible: function(tabPath) {
  677. if (tabPath === 'first0') {
  678. initData();
  679. }
  680. if (tabPath === 'third0') {
  681. if (resultData) {
  682. if (typeof resultData === 'object') {
  683. initResTab(resultData);
  684. } else if (typeof resultData === 'string') {
  685. var resContainer = $('.__res_container');
  686. resContainer.find('.__res_no_data').text(resultData);
  687. }
  688. }
  689. }
  690. },
  691. });
  692. })();
  693. </script>