{"id":310,"date":"2026-07-06T10:53:13","date_gmt":"2026-07-06T02:53:13","guid":{"rendered":"https:\/\/numsimlab.com\/?p=310"},"modified":"2026-07-06T10:53:13","modified_gmt":"2026-07-06T02:53:13","slug":"%e4%ba%86%e8%a7%a3%e7%ae%a1%e7%ba%bf-pipeline","status":"publish","type":"post","link":"https:\/\/numsimlab.com\/?p=310","title":{"rendered":"\u4e86\u89e3\u7ba1\u7ebf Pipeline"},"content":{"rendered":"\n<!-- Generated by   -->\n\n\n\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>\u4e86\u89e3\u7ba1\u7ebf Pipeline<\/title>\n<style>\n:root {\n  --bg: #f8f9fb; --surface: #ffffff; --ink: #1a1a2e; --muted: #5a6578;\n  --rule: #e2e5ea; --accent: #2563eb; --accent2: #059669; --accent3: #8b5cf6;\n  --code-bg: #1e293b; --code-text: #e2e8f0;\n  --warn-bg: #fffbeb; --warn-border: #f59e0b;\n  --err-bg: #fef2f2; --err-border: #ef4444;\n  --ok-bg: #ecfdf5; --ok-border: #10b981;\n  --info-bg: #eff6ff; --info-border: #3b82f6;\n  --tip-bg: #f5f3ff; --tip-border: #8b5cf6;\n}\n[data-theme=\"dark\"] {\n  --bg: #0f172a; --surface: #1e293b; --ink: #f1f5f9; --muted: #94a3b8;\n  --rule: #334155; --accent: #60a5fa; --accent2: #34d399; --accent3: #a78bfa;\n  --code-bg: #020617; --code-text: #cbd5e1;\n  --warn-bg: #2a1b0f; --warn-border: #f59e0b;\n  --err-bg: #2a0f0f; --err-border: #ef4444;\n  --ok-bg: #0f2a1b; --ok-border: #10b981;\n  --info-bg: #172554; --info-border: #3b82f6;\n  --tip-bg: #1a1530; --tip-border: #8b5cf6;\n}\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",\"Noto Sans SC\",\"PingFang SC\",\"Microsoft YaHei\",sans-serif;background:var(--bg);color:var(--ink);line-height:1.75;font-size:15px;transition:background .3s,color .3s}\n.container{max-width:920px;margin:0 auto;padding:5rem 1.25rem 3rem}\n\n\/* Header *\/\nheader{position:fixed;top:0;left:0;right:0;z-index:100;background:var(--surface);border-bottom:1px solid var(--rule);padding:.85rem 0;transition:background .3s}\n.header-inner{max-width:920px;margin:0 auto;padding:0 1.25rem;display:flex;justify-content:space-between;align-items:center}\n.logo{font-size:1.15rem;font-weight:700;color:var(--accent);display:flex;align-items:center;gap:.5rem}\n.logo svg{width:24px;height:24px}\n.controls{display:flex;gap:.6rem;align-items:center}\n.lang-switch{display:flex;background:var(--bg);border:1px solid var(--rule);border-radius:6px;overflow:hidden;transition:background .3s}\n.lang-switch button{border:none;background:transparent;color:var(--muted);padding:.35rem .75rem;cursor:pointer;font-size:.82rem;transition:all .2s}\n.lang-switch button.active{background:var(--accent);color:#fff}\n.theme-toggle{background:var(--bg);border:1px solid var(--rule);border-radius:6px;padding:.35rem .6rem;cursor:pointer;color:var(--muted);font-size:1rem;line-height:1;transition:all .2s}\n\n\/* Page *\/\n.page-header{margin-bottom:2.5rem;text-align:center}\n.page-header h1{font-size:1.8rem;font-weight:800;letter-spacing:-0.02em;margin-bottom:.5rem}\n.page-header p{color:var(--muted);font-size:1rem;max-width:640px;margin:0 auto}\n.badge{display:inline-block;background:var(--accent3);color:#fff;padding:.25rem .75rem;border-radius:999px;font-size:.75rem;font-weight:600;margin-bottom:.8rem;text-transform:uppercase;letter-spacing:.05em}\n\n.card{background:var(--surface);border:1px solid var(--rule);border-radius:12px;padding:1.75rem 2rem;margin-bottom:1.5rem;transition:background .3s}\n.card h2{font-size:1.25rem;font-weight:700;margin-bottom:1rem;padding-bottom:.5rem;border-bottom:2px solid var(--accent);display:inline-block}\n.card h3{font-size:1.05rem;font-weight:600;margin:1.5rem 0 .5rem;color:var(--accent)}\n.card h3:first-child{margin-top:0}\n.card p,.card li{color:var(--muted);margin-bottom:.6rem}\n.card ul,.card ol{padding-left:1.5rem;margin-bottom:.75rem}\nli{margin-bottom:.4rem}\n\npre{background:var(--code-bg);color:var(--code-text);padding:1.1rem 1.25rem;border-radius:8px;overflow-x:auto;font-family:\"SF Mono\",Monaco,\"Cascadia Code\",Consolas,monospace;font-size:.85rem;line-height:1.6;margin:.75rem 0}\ncode{background:var(--bg);color:var(--accent);padding:.15rem .4rem;border-radius:4px;font-family:\"SF Mono\",Monaco,\"Cascadia Code\",Consolas,monospace;font-size:.87em}\npre code{background:transparent;color:inherit;padding:0}\n.cm{color:#94a3b8}\n\n.cmd{display:flex;align-items:center;gap:.75rem;background:var(--code-bg);color:var(--code-text);padding:.8rem 1.2rem;border-radius:8px;font-family:\"SF Mono\",Monaco,\"Cascadia Code\",Consolas,monospace;font-size:.87rem;margin:.6rem 0;overflow-x:auto}\n.cmd .p{color:#6ee7b7;user-select:none;flex-shrink:0}\n.cmd .c{white-space:nowrap}\n\n.callout{padding:1rem 1.25rem;border-radius:8px;margin:1rem 0;border-left:4px solid}\n.callout.warn{background:var(--warn-bg);border-color:var(--warn-border)}\n.callout.err{background:var(--err-bg);border-color:var(--err-border)}\n.callout.ok{background:var(--ok-bg);border-color:var(--ok-border)}\n.callout.info{background:var(--info-bg);border-color:var(--info-border)}\n.callout.tip{background:var(--tip-bg);border-color:var(--tip-border)}\n.callout strong{display:block;margin-bottom:.3rem;color:var(--ink)}\n\n.table-wrap{overflow-x:auto;margin:1rem 0}\ntable{width:100%;border-collapse:collapse;font-size:.89rem;min-width:500px}\nth,td{padding:.6rem .85rem;text-align:left;border-bottom:1px solid var(--rule)}\nth{background:var(--bg);font-weight:600;color:var(--ink);white-space:nowrap}\ntr:hover td{background:var(--bg)}\n\n.compare-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin:1rem 0}\n.compare-box{border:1px solid var(--rule);border-radius:8px;padding:1.1rem;background:var(--surface)}\n.compare-box .box-title{font-weight:700;font-size:.88rem;margin-bottom:.5rem;color:var(--accent)}\n\n.flow-box{border:1px solid var(--rule);border-radius:8px;padding:1rem;background:var(--bg);margin:.5rem 0;text-align:center;font-family:\"SF Mono\",Consolas,monospace;font-size:.85rem}\n.flow-row{display:flex;align-items:center;justify-content:center;gap:.4rem;flex-wrap:wrap;margin:.3rem 0}\n.flow-item{background:var(--accent);color:#fff;padding:.4rem .75rem;border-radius:6px;font-weight:600}\n.flow-item.gray{background:var(--rule);color:var(--muted)}\n.flow-item.ok{background:var(--accent2);color:#fff}\n.flow-arrow{color:var(--muted);font-size:1.1rem}\n\n.summary-box{background:var(--surface);border:2px solid var(--accent);border-radius:12px;padding:1.5rem 1.75rem;margin-top:1.5rem}\n.summary-box h2{border-bottom-color:var(--accent2);margin-top:0}\n.s-row{display:flex;gap:1.5rem;margin:.6rem 0;align-items:flex-start}\n.s-label{flex-shrink:0;font-weight:700;font-size:.9rem;color:var(--accent);min-width:120px}\n.s-desc{color:var(--muted);font-size:.92rem}\n\n.lang-section{display:none}\n.lang-section.active{display:block}\n\nfooter{text-align:center;color:var(--muted);font-size:.8rem;margin-top:2rem;padding-top:1rem;border-top:1px solid var(--rule)}\n\n@media(max-width:640px){\n  .compare-grid{grid-template-columns:1fr}\n  .page-header h1{font-size:1.5rem}\n  .card{padding:1.25rem 1.5rem}\n  .s-row{flex-direction:column;gap:.3rem}\n  .header-inner{flex-wrap:wrap;gap:.5rem}\n}\n<\/style>\n\n\n\n<header>\n  <div class=\"header-inner\">\n    <div class=\"logo\">\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n        <line x1=\"22\" y1=\"12\" x2=\"2\" y2=\"12\"><\/line><polyline points=\"9 5 2 12 9 19\"><\/polyline>\n      <\/svg>\n      Pipeline Guide\n    <\/div>\n    <div class=\"controls\">\n      <div class=\"lang-switch\">\n        <button class=\"active\" onclick=\"setLang('zh')\" id=\"btn-zh\">\u4e2d\u6587<\/button>\n        <button onclick=\"setLang('en')\" id=\"btn-en\">English<\/button>\n      <\/div>\n      <button class=\"theme-toggle\" onclick=\"toggleTheme()\" title=\"Toggle theme\">\u263c<\/button>\n    <\/div>\n  <\/div>\n<\/header>\n\n<div class=\"container\">\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 \u4e2d\u6587\u7248 \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<div class=\"lang-section active\" id=\"lang-zh\">\n\n<div class=\"page-header\">\n  <span class=\"badge\">Pipeline \u79d1\u666e<\/span>\n  <h1>\u7ba1\u7ebf Pipeline \u5b8c\u5168\u6307\u5357<\/h1>\n  <p>\u4ece\u96f6\u7406\u89e3&#8221;\u7ba1\u7ebf&#8221;\u662f\u4ec0\u4e48\u3001\u4e3a\u4ec0\u4e48\u9700\u8981\u5b83\u3001\u4ee5\u53ca\u5b83\u5728\u4e0d\u540c\u9886\u57df\u4e2d\u7684\u6838\u5fc3\u5e94\u7528<\/p>\n<\/div>\n\n<!-- 1 -->\n<div class=\"card\">\n  <h2>\u4e00\u3001\u4e00\u53e5\u8bdd\u5b9a\u4e49<\/h2>\n  <p><strong>\u7ba1\u7ebf\uff08Pipeline\uff09<\/strong>\u662f\u4e00\u79cd\u5c06<strong>\u590d\u6742\u4efb\u52a1\u62c6\u5206\u6210\u591a\u4e2a\u6709\u5e8f\u6b65\u9aa4<\/strong>\u7684\u5904\u7406\u65b9\u5f0f\u3002\u524d\u4e00\u4e2a\u6b65\u9aa4\u7684\u8f93\u51fa\u76f4\u63a5\u4f5c\u4e3a\u4e0b\u4e00\u4e2a\u6b65\u9aa4\u7684\u8f93\u5165\uff0c\u50cf\u6d41\u6c34\u7ebf\u4e00\u6837\u8fde\u7eed\u4f20\u9012\uff0c\u76f4\u5230\u5b8c\u6210\u6574\u4e2a\u4efb\u52a1\u3002<\/p>\n\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item\">\u6b65\u9aa4 1<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">\u6b65\u9aa4 2<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">\u6b65\u9aa4 3<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">\u6b65\u9aa4 4<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">\u7ed3\u679c<\/span>\n    <\/div>\n  <\/div>\n\n  <p>\u5c31\u50cf\u5de5\u5382\u7684\u751f\u4ea7\u6d41\u6c34\u7ebf\u2014\u2014\u539f\u6750\u6599\u4ece\u5165\u53e3\u8fdb\u5165\uff0c\u7ecf\u8fc7\u5207\u5272\u3001\u6253\u78e8\u3001\u7ec4\u88c5\u3001\u8d28\u68c0\u7b49\u4e00\u9053\u9053\u5de5\u5e8f\uff0c\u6700\u7ec8\u6210\u4e3a\u6210\u54c1\u4ece\u51fa\u53e3\u51fa\u6765\u3002\u6bcf\u4e2a\u5de5\u5e8f\u53ea\u8d1f\u8d23\u81ea\u5df1\u7684\u5de5\u4f5c\uff0c\u4e0d\u9700\u8981\u5173\u5fc3\u524d\u540e\u5de5\u5e8f\u7684\u7ec6\u8282\u3002<\/p>\n<\/div>\n\n<!-- 2 -->\n<div class=\"card\">\n  <h2>\u4e8c\u3001\u4e3a\u4ec0\u4e48\u9700\u8981\u7ba1\u7ebf\uff1f<\/h2>\n  <p>\u5f53\u4efb\u52a1\u8db3\u591f\u590d\u6742\u65f6\uff0c&#8221;\u4e00\u6b65\u5230\u4f4d&#8221;\u7684\u5199\u6cd5\u4f1a\u5e26\u6765\u4e25\u91cd\u95ee\u9898\uff1a<\/p>\n\n  <div class=\"compare-grid\">\n    <div class=\"compare-box\">\n      <div class=\"box-title\" style=\"color:#ef4444\">\u6ca1\u6709\u7ba1\u7ebf\uff1a\u4e00\u56e2\u4e71\u9ebb<\/div>\n      <pre><code>def process_data(raw_data):\n    # \u8bfb\u53d6\u6570\u636e\n    data = read_csv(raw_data)\n    # \u6e05\u6d17\u6570\u636e\n    data = remove_nulls(data)\n    data = fix_types(data)\n    # \u8f6c\u6362\u6570\u636e\n    data = normalize(data)\n    data = encode_labels(data)\n    # \u5206\u6790\u6570\u636e\n    data = run_model(data)\n    data = post_process(data)\n    # \u8f93\u51fa\u7ed3\u679c\n    save_report(data)\n    return data\n<span class=\"cm\"># 200 \u884c\u4ee3\u7801\uff0c\u8026\u5408\u4e25\u91cd\uff0c<\/span>\n<span class=\"cm\"># \u4e00\u5904\u4fee\u6539\u7275\u5168\u8eab\uff0c\u96be\u4ee5\u7ef4\u62a4<\/span><\/code><\/pre>\n    <\/div>\n    <div class=\"compare-box\">\n      <div class=\"box-title\" style=\"color:#059669\">\u4f7f\u7528\u7ba1\u7ebf\uff1a\u6e05\u6670\u6709\u5e8f<\/div>\n      <pre><code>pipeline = [\n    ReadCSV(),\n    RemoveNulls(),\n    FixTypes(),\n    Normalize(),\n    EncodeLabels(),\n    RunModel(),\n    PostProcess(),\n    SaveReport()\n]\nresult = pipeline.run(raw_data)\n<span class=\"cm\"># \u6bcf\u4e2a\u6b65\u9aa4\u72ec\u7acb\uff0c\u53ef\u66ff\u6362\u3001\u53ef\u590d\u7528\u3001<\/span>\n<span class=\"cm\"># \u53ef\u5355\u72ec\u6d4b\u8bd5\u3001\u4e00\u76ee\u4e86\u7136<\/span><\/code><\/pre>\n    <\/div>\n  <\/div>\n\n  <h3>\u7ba1\u7ebf\u89e3\u51b3\u7684\u6838\u5fc3\u95ee\u9898<\/h3>\n  <div class=\"table-wrap\">\n    <table>\n      <tbody><tr><th>\u95ee\u9898<\/th><th>\u7ba1\u7ebf\u7684\u89e3\u51b3\u65b9\u6848<\/th><\/tr>\n      <tr><td><strong>\u4ee3\u7801\u8026\u5408<\/strong><\/td><td>\u6bcf\u4e2a\u6b65\u9aa4\u72ec\u7acb\uff0c\u4e92\u4e0d\u5f71\u54cd<\/td><\/tr>\n      <tr><td><strong>\u96be\u4ee5\u8c03\u8bd5<\/strong><\/td><td>\u4efb\u4f55\u6b65\u9aa4\u53ef\u5355\u72ec\u8fd0\u884c\u548c\u6d4b\u8bd5<\/td><\/tr>\n      <tr><td><strong>\u65e0\u6cd5\u590d\u7528<\/strong><\/td><td>\u6b65\u9aa4\u6a21\u5757\u5316\uff0c\u8de8\u9879\u76ee\u590d\u7528<\/td><\/tr>\n      <tr><td><strong>\u4fee\u6539\u56f0\u96be<\/strong><\/td><td>\u66ff\u6362\/\u589e\u5220\u6b65\u9aa4\u4e0d\u5f71\u54cd\u5176\u4ed6\u90e8\u5206<\/td><\/tr>\n      <tr><td><strong>\u6d41\u7a0b\u4e0d\u900f\u660e<\/strong><\/td><td>\u4ece\u547d\u540d\u5373\u53ef\u7406\u89e3\u5b8c\u6574\u5904\u7406\u6d41\u7a0b<\/td><\/tr>\n      <tr><td><strong>\u5e76\u884c\u56f0\u96be<\/strong><\/td><td>\u65e0\u4f9d\u8d56\u7684\u6b65\u9aa4\u53ef\u5e76\u884c\u6267\u884c<\/td><\/tr>\n    <\/tbody><\/table>\n  <\/div>\n<\/div>\n\n<!-- 3 -->\n<div class=\"card\">\n  <h2>\u4e09\u3001\u7ba1\u7ebf\u7684\u6838\u5fc3\u7279\u5f81<\/h2>\n  <p>\u5224\u65ad\u4e00\u4e2a\u8bbe\u8ba1\u662f\u5426\u771f\u6b63\u7b26\u5408&#8221;\u7ba1\u7ebf&#8221;\u601d\u60f3\uff0c\u770b\u5b83\u662f\u5426\u6ee1\u8db3\u4ee5\u4e0b\u56db\u4e2a\u7279\u5f81\uff1a<\/p>\n\n  <div class=\"table-wrap\">\n    <table>\n      <tbody><tr><th>\u7279\u5f81<\/th><th>\u542b\u4e49<\/th><th>\u7c7b\u6bd4<\/th><\/tr>\n      <tr><td><strong>\u6709\u5e8f<\/strong><\/td><td>\u6b65\u9aa4\u6709\u660e\u786e\u7684\u5148\u540e\u6267\u884c\u987a\u5e8f<\/td><td>\u6d41\u6c34\u7ebf\u4e0d\u80fd\u5148\u55b7\u6f06\u540e\u5207\u5272<\/td><\/tr>\n      <tr><td><strong>\u94fe\u5f0f<\/strong><\/td><td>\u524d\u4e00\u6b65\u7684\u8f93\u51fa = \u540e\u4e00\u6b65\u7684\u8f93\u5165<\/td><td>\u9762\u5305\u51fa\u7089\u540e\u76f4\u63a5\u4f20\u9001\u7ed9\u5305\u88c5<\/td><\/tr>\n      <tr><td><strong>\u72ec\u7acb<\/strong><\/td><td>\u6bcf\u4e2a\u6b65\u9aa4\u53ea\u5173\u5fc3\u81ea\u5df1\u7684\u8f93\u5165\u548c\u8f93\u51fa<\/td><td>\u8d28\u68c0\u5458\u53ea\u8d1f\u8d23\u67e5\u8d28\u91cf\uff0c\u4e0d\u7ba1\u751f\u4ea7<\/td><\/tr>\n      <tr><td><strong>\u53ef\u63d2\u62d4<\/strong><\/td><td>\u4efb\u610f\u6b65\u9aa4\u53ef\u88ab\u66ff\u6362\u3001\u8df3\u8fc7\u6216\u65b0\u589e<\/td><td>\u53ef\u589e\u52a0\u4e00\u9053\u6d88\u6bd2\u5de5\u5e8f\uff0c\u4e0d\u5f71\u54cd\u5176\u4ed6<\/td><\/tr>\n    <\/tbody><\/table>\n  <\/div>\n\n  <div class=\"callout info\">\n    <strong>\u5173\u952e\u7406\u89e3<\/strong>\n    \u7ba1\u7ebf\u7684\u7cbe\u9ad3\u4e0d\u662f&#8221;\u5206\u6bb5&#8221;\uff0c\u800c\u662f<strong>\u89e3\u8026<\/strong>\u3002\u6bcf\u4e2a\u6b65\u9aa4\u50cf\u4e50\u9ad8\u79ef\u6728\uff0c\u53ef\u4ee5\u4efb\u610f\u7ec4\u5408\u642d\u5efa\u4e0d\u540c\u7684\u6d41\u7a0b\u3002\n  <\/div>\n<\/div>\n\n<!-- 4 -->\n<div class=\"card\">\n  <h2>\u56db\u3001\u4e0d\u540c\u9886\u57df\u7684\u7ba1\u7ebf<\/h2>\n\n  <h3>4.1 \u8f6f\u4ef6\u5f00\u53d1\uff1aCI\/CD \u7ba1\u7ebf<\/h3>\n  <p>\u4ee3\u7801\u4ece\u63d0\u4ea4\u5230\u4e0a\u7ebf\uff0c\u81ea\u52a8\u7ecf\u8fc7\u4e00\u7cfb\u5217\u6807\u51c6\u5316\u6b65\u9aa4\uff1a<\/p>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item\">\u4ee3\u7801\u63d0\u4ea4<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">\u7f16\u8bd1\u6784\u5efa<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">\u5355\u5143\u6d4b\u8bd5<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">\u5b89\u5168\u626b\u63cf<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">\u6253\u5305<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">\u81ea\u52a8\u90e8\u7f72<\/span>\n    <\/div>\n  <\/div>\n  <p>\u4efb\u4f55\u6b65\u9aa4\u5931\u8d25\u90fd\u4f1a<strong>\u7acb\u5373\u7ec8\u6b62<\/strong>\u6574\u4e2a\u7ba1\u7ebf\uff0c\u901a\u77e5\u5f00\u53d1\u8005\u4fee\u590d\u3002GitHub Actions\u3001GitLab CI\u3001Jenkins \u90fd\u662f\u8fd9\u7c7b\u7ba1\u7ebf\u7684\u5b9e\u73b0\u5de5\u5177\u3002<\/p>\n\n  <h3>4.2 \u6570\u636e\u5de5\u7a0b\uff1aETL \u7ba1\u7ebf<\/h3>\n  <p>\u5c06\u539f\u59cb\u6570\u636e\u8f6c\u5316\u4e3a\u53ef\u7528\u6570\u636e\u7684\u6807\u51c6\u6d41\u7a0b\uff1a<\/p>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item gray\">Extract<br><small>\u62bd\u53d6<\/small><\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Transform<br><small>\u8f6c\u6362<\/small><\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">Load<br><small>\u52a0\u8f7d<\/small><\/span>\n    <\/div>\n  <\/div>\n  <p>\u4f8b\u5982\uff1a\u4ece\u6570\u636e\u5e93\u62bd\u53d6\u9500\u552e\u8bb0\u5f55 \u2192 \u6e05\u6d17\u7f3a\u5931\u503c\u3001\u7edf\u4e00\u683c\u5f0f \u2192 \u52a0\u8f7d\u5230\u6570\u636e\u4ed3\u5e93\u4f9b\u62a5\u8868\u4f7f\u7528\u3002<\/p>\n\n  <h3>4.3 Linux Shell\uff1a\u7ba1\u9053<\/h3>\n  <p>\u547d\u4ee4\u884c\u4e2d\u6700\u76f4\u89c2\u7684\u7ba1\u7ebf\u2014\u2014\u7ba1\u9053\u7b26\u53f7 <code>|<\/code>\uff1a<\/p>\n  <div class=\"cmd\"><span class=\"p\">$<\/span><span class=\"c\">cat log.txt | grep &#8220;ERROR&#8221; | sort | uniq -c | sort -rn | head -5<\/span><\/div>\n  <p>\u8fd9\u6761\u547d\u4ee4\u7684\u542b\u4e49\u662f\uff1a<\/p>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item gray\">\u8bfb\u53d6\u65e5\u5fd7<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u8fc7\u6ee4 ERROR<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u6392\u5e8f<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u7edf\u8ba1\u9891\u6b21<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u964d\u5e8f\u6392\u5217<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">\u53d6\u524d5\u540d<\/span>\n    <\/div>\n  <\/div>\n  <p>\u6bcf\u4e2a\u547d\u4ee4\u53ea\u505a\u4e00\u4ef6\u4e8b\uff0c\u901a\u8fc7\u7ba1\u9053\u4e32\u8054\uff0c\u590d\u6742\u4efb\u52a1\u8fce\u5203\u800c\u89e3\u3002<\/p>\n\n  <h3>4.4 GPU \u56fe\u5f62\u6e32\u67d3\uff1a\u56fe\u5f62\u7ba1\u7ebf<\/h3>\n  <p>3D \u573a\u666f\u5230\u5c4f\u5e55\u50cf\u7d20\u7684\u8f6c\u6362\u6d41\u7a0b\uff1a<\/p>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item gray\">\u9876\u70b9\u5904\u7406<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u56fe\u5143\u88c5\u914d<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u5149\u6805\u5316<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u7247\u5143\u7740\u8272<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">\u8f93\u51fa\u50cf\u7d20<\/span>\n    <\/div>\n  <\/div>\n  <p>GPU \u628a 3D \u6a21\u578b\u7ecf\u8fc7\u591a\u6b65\u5904\u7406\u53d8\u6210\u5c4f\u5e55\u4e0a\u770b\u5230\u7684\u753b\u9762\uff0c\u6bcf\u4e00\u6b65\u7531 GPU \u7684\u4e13\u7528\u786c\u4ef6\u5e76\u884c\u6267\u884c\u3002<\/p>\n\n  <h3>4.5 \u673a\u5668\u5b66\u4e60\uff1aML Pipeline<\/h3>\n  <pre><code>from sklearn.pipeline import Pipeline\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.svm import SVC\n\npipeline = Pipeline([\n    ('scaler', StandardScaler()),     <span class=\"cm\"># \u6b65\u9aa41\uff1a\u6807\u51c6\u5316\u6570\u636e<\/span>\n    ('classifier', SVC())             <span class=\"cm\"># \u6b65\u9aa42\uff1a\u8bad\u7ec3\u5206\u7c7b\u5668<\/span>\n])\n\npipeline.fit(X_train, y_train)        <span class=\"cm\"># \u4e00\u6b65\u5b8c\u6210\u9884\u5904\u7406 + \u8bad\u7ec3<\/span>\npredictions = pipeline.predict(X_test) <span class=\"cm\"># \u4e00\u6b65\u5b8c\u6210\u9884\u5904\u7406 + \u9884\u6d4b<\/span><\/code><\/pre>\n  <p>\u8bad\u7ec3\u548c\u6d4b\u8bd5\u65f6\uff0c\u9884\u5904\u7406\u6b65\u9aa4\u81ea\u52a8\u6309\u76f8\u540c\u65b9\u5f0f\u6267\u884c\uff0c\u907f\u514d<strong>\u6570\u636e\u6cc4\u9732<\/strong>\uff08\u6d4b\u8bd5\u96c6\u4fe1\u606f\u6df7\u5165\u8bad\u7ec3\u8fc7\u7a0b\uff09\u3002<\/p>\n<\/div>\n\n<!-- 5 -->\n<div class=\"card\">\n  <h2>\u4e94\u3001\u5982\u4f55\u7406\u89e3\uff1a\u7c7b\u6bd4\u4e0e\u751f\u6d3b\u6848\u4f8b<\/h2>\n\n  <h3>5.1 \u9910\u5385\u53a8\u623f<\/h3>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item gray\">\u5907\u6599<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u5207\u914d<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u70f9\u996a<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u6446\u76d8<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">\u4e0a\u83dc<\/span>\n    <\/div>\n  <\/div>\n  <p>\u6bcf\u4e2a\u53a8\u5e08\u8d1f\u8d23\u4e00\u9053\u5de5\u5e8f\uff0c\u4e0d\u9700\u8981\u4f1a\u505a\u83dc\u5168\u6d41\u7a0b\u3002\u6362\u83dc\u5355\u65f6\uff0c\u53ea\u9700\u8c03\u6574\u67d0\u51e0\u4e2a\u5de5\u5e8f\u3002<\/p>\n\n  <h3>5.2 \u5feb\u9012\u5206\u62e3<\/h3>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item gray\">\u6536\u4ef6<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u626b\u63cf\u5165\u5e93<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u5206\u62e3<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u8fd0\u8f93<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u6d3e\u9001<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">\u7b7e\u6536<\/span>\n    <\/div>\n  <\/div>\n  <p>\u6bcf\u4e2a\u73af\u8282\u53ea\u5904\u7406\u81ea\u5df1\u7684\u4efb\u52a1\uff0c\u5e76\u5c06\u5305\u88f9\u4ea4\u7ed9\u4e0b\u4e00\u73af\u8282\u3002\u4efb\u4f55\u73af\u8282\u51fa\u95ee\u9898\uff0c\u90fd\u53ef\u4ee5\u5355\u72ec\u6392\u67e5\u548c\u4fee\u590d\u3002<\/p>\n\n  <h3>5.3 \u81ea\u6765\u6c34\u5904\u7406\u5382<\/h3>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item gray\">\u53d6\u6c34<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u6c89\u6dc0<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u8fc7\u6ee4<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">\u6d88\u6bd2<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">\u8f93\u9001\u5230\u5bb6<\/span>\n    <\/div>\n  <\/div>\n  <p>\u6bcf\u4e2a\u6c60\u5b50\u53ea\u505a\u4e00\u79cd\u5904\u7406\u3002\u5982\u679c\u8981\u63d0\u5347\u6c34\u8d28\uff0c\u589e\u52a0\u4e00\u4e2a\u8fc7\u6ee4\u6c60\u5373\u53ef\uff0c\u4e0d\u7528\u6539\u9020\u6574\u4e2a\u5382\u3002<\/p>\n<\/div>\n\n<!-- 6 -->\n<div class=\"card\">\n  <h2>\u516d\u3001\u7ba1\u7ebf\u7684\u4f18\u70b9\u4e0e\u5c40\u9650<\/h2>\n\n  <div class=\"compare-grid\">\n    <div class=\"compare-box\">\n      <div class=\"box-title\" style=\"color:#059669\">\u4f18\u70b9<\/div>\n      <ul style=\"font-size:.9rem\">\n        <li>\u7ed3\u6784\u6e05\u6670\uff0c\u6d41\u7a0b\u900f\u660e<\/li>\n        <li>\u6b65\u9aa4\u72ec\u7acb\uff0c\u6613\u4e8e\u8c03\u8bd5<\/li>\n        <li>\u53ef\u590d\u7528\uff0c\u53ef\u5171\u4eab<\/li>\n        <li>\u6613\u4e8e\u5e76\u884c\u4f18\u5316<\/li>\n        <li>\u65b0\u4eba\u4e0a\u624b\u5feb\uff08\u8bfb\u540d\u5b57\u5c31\u61c2\u6d41\u7a0b\uff09<\/li>\n        <li>\u9519\u8bef\u5b9a\u4f4d\u5feb\uff08\u54ea\u6b65\u62a5\u9519\u67e5\u54ea\u6b65\uff09<\/li>\n      <\/ul>\n    <\/div>\n    <div class=\"compare-box\">\n      <div class=\"box-title\" style=\"color:#ef4444\">\u5c40\u9650<\/div>\n      <ul style=\"font-size:.9rem\">\n        <li>\u4e0d\u9002\u5408\u5f3a\u4f9d\u8d56\u5faa\u73af\u7684\u573a\u666f<\/li>\n        <li>\u6570\u636e\u4f20\u9012\u6709\u989d\u5916\u5f00\u9500<\/li>\n        <li>\u6b65\u9aa4\u4e4b\u95f4\u683c\u5f0f\u5951\u7ea6\u9700\u8981\u4e25\u683c\u7ef4\u62a4<\/li>\n        <li>\u7b80\u5355\u4efb\u52a1\u53ef\u80fd&#8221;\u8fc7\u5ea6\u8bbe\u8ba1&#8221;<\/li>\n        <li>\u5168\u5c40\u4f18\u5316\u6bd4\u5355\u4f53\u66f4\u590d\u6742<\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n\n  <div class=\"callout tip\">\n    <strong>\u4f7f\u7528\u5efa\u8bae<\/strong>\n    \u5f53\u5904\u7406\u6d41\u7a0b\u8d85\u8fc7 3 \u4e2a\u72ec\u7acb\u6b65\u9aa4\uff0c\u6216\u9700\u8981\u591a\u4eba\u534f\u4f5c\u3001\u9891\u7e41\u4fee\u6539\u65f6\uff0c\u4f7f\u7528\u7ba1\u7ebf\u3002\u5982\u679c\u53ea\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u4e24\u6b65\u9aa4\u8f6c\u6362\uff0c\u76f4\u63a5\u7528\u51fd\u6570\u5373\u53ef\uff0c\u4e0d\u5fc5\u5f3a\u884c\u7ba1\u7ebf\u5316\u3002\n  <\/div>\n<\/div>\n\n<div class=\"summary-box\">\n  <h2>\u6838\u5fc3\u8981\u70b9\u603b\u7ed3<\/h2>\n  <div class=\"s-row\"><div class=\"s-label\">\u5b9a\u4e49<\/div><div class=\"s-desc\">\u7ba1\u7ebf = \u5c06\u590d\u6742\u4efb\u52a1\u62c6\u5206\u4e3a\u591a\u4e2a\u6709\u5e8f\u6b65\u9aa4\uff0c\u524d\u4e00\u6b65\u8f93\u51fa\u4f5c\u4e3a\u540e\u4e00\u6b65\u8f93\u5165<\/div><\/div>\n  <div class=\"s-row\"><div class=\"s-label\">\u76ee\u7684<\/div><div class=\"s-desc\">\u89e3\u8026\u590d\u6742\u6d41\u7a0b\uff0c\u63d0\u5347\u53ef\u8bfb\u6027\u3001\u53ef\u7ef4\u62a4\u6027\u3001\u53ef\u590d\u7528\u6027\u548c\u53ef\u8c03\u8bd5\u6027<\/div><\/div>\n  <div class=\"s-row\"><div class=\"s-label\">\u6838\u5fc3\u7279\u5f81<\/div><div class=\"s-desc\">\u6709\u5e8f\u3001\u94fe\u5f0f\u3001\u72ec\u7acb\u3001\u53ef\u63d2\u62d4 \u2014\u2014 \u50cf\u4e50\u9ad8\u79ef\u6728\u4e00\u6837\u81ea\u7531\u7ec4\u5408<\/div><\/div>\n  <div class=\"s-row\"><div class=\"s-label\">\u5e38\u89c1\u9886\u57df<\/div><div class=\"s-desc\">CI\/CD \u90e8\u7f72\u3001ETL \u6570\u636e\u5904\u7406\u3001Linux \u7ba1\u9053\u3001GPU \u56fe\u5f62\u6e32\u67d3\u3001ML \u8bad\u7ec3\u6d41\u7a0b<\/div><\/div>\n  <div class=\"s-row\"><div class=\"s-label\">\u4f55\u65f6\u4f7f\u7528<\/div><div class=\"s-desc\">\u6d41\u7a0b\u8d85\u8fc7 3 \u4e2a\u72ec\u7acb\u6b65\u9aa4\u3001\u9700\u8981\u591a\u4eba\u534f\u4f5c\u3001\u6b65\u9aa4\u53ef\u80fd\u9891\u7e41\u53d8\u52a8\u65f6<\/div><\/div>\n<\/div>\n\n<\/div><!-- \/lang-zh -->\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 English \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<div class=\"lang-section\" id=\"lang-en\">\n\n<div class=\"page-header\">\n  <span class=\"badge\">Pipeline Guide<\/span>\n  <h1>Complete Pipeline Guide<\/h1>\n  <p>Understand what a pipeline is, why it&#8217;s needed, and its core applications across different fields<\/p>\n<\/div>\n\n<!-- 1 -->\n<div class=\"card\">\n  <h2>1. Definition in One Sentence<\/h2>\n  <p>A <strong>Pipeline<\/strong> is a way of <strong>breaking down a complex task into multiple ordered steps<\/strong>. The output of each previous step becomes the input of the next, passing through continuously like an assembly line until the entire task is complete.<\/p>\n\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item\">Step 1<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">Step 2<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">Step 3<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">Step 4<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">Result<\/span>\n    <\/div>\n  <\/div>\n\n  <p>Like a factory production line \u2014 raw materials enter, go through cutting, polishing, assembly, quality inspection, and other processes, and eventually come out as finished products. Each process only handles its own work without worrying about the details of others.<\/p>\n<\/div>\n\n<!-- 2 -->\n<div class=\"card\">\n  <h2>2. Why Do We Need Pipelines?<\/h2>\n  <p>When tasks are complex enough, a &#8220;one-shot&#8221; approach causes serious problems:<\/p>\n\n  <div class=\"compare-grid\">\n    <div class=\"compare-box\">\n      <div class=\"box-title\" style=\"color:#ef4444\">Without Pipeline: Tangled Mess<\/div>\n      <pre><code>def process_data(raw_data):\n    # Read data\n    data = read_csv(raw_data)\n    # Clean data\n    data = remove_nulls(data)\n    data = fix_types(data)\n    # Transform data\n    data = normalize(data)\n    data = encode_labels(data)\n    # Analyze data\n    data = run_model(data)\n    data = post_process(data)\n    # Output result\n    save_report(data)\n    return data\n<span class=\"cm\"># 200 lines, tightly coupled,<\/span>\n<span class=\"cm\"># one change affects everything, hard to maintain<\/span><\/code><\/pre>\n    <\/div>\n    <div class=\"compare-box\">\n      <div class=\"box-title\" style=\"color:#059669\">With Pipeline: Clean &amp; Ordered<\/div>\n      <pre><code>pipeline = [\n    ReadCSV(),\n    RemoveNulls(),\n    FixTypes(),\n    Normalize(),\n    EncodeLabels(),\n    RunModel(),\n    PostProcess(),\n    SaveReport()\n]\nresult = pipeline.run(raw_data)\n<span class=\"cm\"># Each step is independent, replaceable,<\/span>\n<span class=\"cm\"># reusable, testable, crystal clear<\/span><\/code><\/pre>\n    <\/div>\n  <\/div>\n\n  <h3>Core Problems Pipelines Solve<\/h3>\n  <div class=\"table-wrap\">\n    <table>\n      <tbody><tr><th>Problem<\/th><th>Pipeline Solution<\/th><\/tr>\n      <tr><td><strong>Tight coupling<\/strong><\/td><td>Each step is independent, unaffected by others<\/td><\/tr>\n      <tr><td><strong>Hard to debug<\/strong><\/td><td>Any step can be run and tested independently<\/td><\/tr>\n      <tr><td><strong>Not reusable<\/strong><\/td><td>Modular steps can be reused across projects<\/td><\/tr>\n      <tr><td><strong>Difficult to modify<\/strong><\/td><td>Replace\/add\/remove steps without affecting others<\/td><\/tr>\n      <tr><td><strong>Opaque flow<\/strong><\/td><td>Step names alone explain the full process<\/td><\/tr>\n      <tr><td><strong>Hard to parallelize<\/strong><\/td><td>Steps with no dependencies run in parallel<\/td><\/tr>\n    <\/tbody><\/table>\n  <\/div>\n<\/div>\n\n<!-- 3 -->\n<div class=\"card\">\n  <h2>3. Core Characteristics of Pipelines<\/h2>\n  <p>To determine if a design truly follows pipeline thinking, check if it meets these four characteristics:<\/p>\n\n  <div class=\"table-wrap\">\n    <table>\n      <tbody><tr><th>Characteristic<\/th><th>Meaning<\/th><th>Analogy<\/th><\/tr>\n      <tr><td><strong>Ordered<\/strong><\/td><td>Steps have a clear execution sequence<\/td><td>Assembly line can&#8217;t paint before cutting<\/td><\/tr>\n      <tr><td><strong>Chained<\/strong><\/td><td>Previous step&#8217;s output = next step&#8217;s input<\/td><td>Bread goes directly from oven to packaging<\/td><\/tr>\n      <tr><td><strong>Independent<\/strong><\/td><td>Each step only cares about its input and output<\/td><td>QC inspector checks quality, not production<\/td><\/tr>\n      <tr><td><strong>Pluggable<\/strong><\/td><td>Any step can be replaced, skipped, or added<\/td><td>Add a disinfection step without changing others<\/td><\/tr>\n    <\/tbody><\/table>\n  <\/div>\n\n  <div class=\"callout info\">\n    <strong>Key Insight<\/strong>\n    The essence of a pipeline is not &#8220;segmentation&#8221; but <strong>decoupling<\/strong>. Each step is like a LEGO block that can be combined into different flows.\n  <\/div>\n<\/div>\n\n<!-- 4 -->\n<div class=\"card\">\n  <h2>4. Pipelines in Different Fields<\/h2>\n\n  <h3>4.1 Software Development: CI\/CD Pipeline<\/h3>\n  <p>Code goes through a series of standardized automated steps from commit to deployment:<\/p>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item\">Code Commit<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">Build<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">Unit Tests<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">Security Scan<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item\">Package<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">Auto Deploy<\/span>\n    <\/div>\n  <\/div>\n  <p>Any step failure <strong>immediately halts<\/strong> the pipeline and notifies the developer. GitHub Actions, GitLab CI, and Jenkins are all pipeline tools.<\/p>\n\n  <h3>4.2 Data Engineering: ETL Pipeline<\/h3>\n  <p>The standard flow for converting raw data into usable data:<\/p>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item gray\">Extract<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Transform<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">Load<\/span>\n    <\/div>\n  <\/div>\n  <p>Example: Pull sales records from a database \u2192 clean null values, unify formats \u2192 load into a data warehouse for reporting.<\/p>\n\n  <h3>4.3 Linux Shell: Pipe<\/h3>\n  <p>The most intuitive pipeline in the command line \u2014 the pipe symbol <code>|<\/code>:<\/p>\n  <div class=\"cmd\"><span class=\"p\">$<\/span><span class=\"c\">cat log.txt | grep &#8220;ERROR&#8221; | sort | uniq -c | sort -rn | head -5<\/span><\/div>\n  <p>This command means:<\/p>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item gray\">Read log<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Filter ERROR<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Sort<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Count freq<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Sort desc<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">Top 5<\/span>\n    <\/div>\n  <\/div>\n  <p>Each command does one thing, connected by pipes. Complex tasks become simple.<\/p>\n\n  <h3>4.4 GPU Graphics: Graphics Pipeline<\/h3>\n  <p>The flow from a 3D scene to screen pixels:<\/p>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item gray\">Vertex Processing<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Primitive Assembly<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Rasterization<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Fragment Shader<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">Output Pixels<\/span>\n    <\/div>\n  <\/div>\n  <p>GPU processes 3D models through multiple stages, each executed in parallel by dedicated hardware.<\/p>\n\n  <h3>4.5 Machine Learning: ML Pipeline<\/h3>\n  <pre><code>from sklearn.pipeline import Pipeline\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.svm import SVC\n\npipeline = Pipeline([\n    ('scaler', StandardScaler()),     <span class=\"cm\"># Step 1: Standardize data<\/span>\n    ('classifier', SVC())             <span class=\"cm\"># Step 2: Train classifier<\/span>\n])\n\npipeline.fit(X_train, y_train)        <span class=\"cm\"># Preprocessing + training in one step<\/span>\npredictions = pipeline.predict(X_test) <span class=\"cm\"># Preprocessing + prediction in one step<\/span><\/code><\/pre>\n  <p>During training and testing, preprocessing steps are executed automatically in the same way, preventing <strong>data leakage<\/strong> (test information leaking into training).<\/p>\n<\/div>\n\n<!-- 5 -->\n<div class=\"card\">\n  <h2>5. Analogies &amp; Real-Life Cases<\/h2>\n\n  <h3>5.1 Restaurant Kitchen<\/h3>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item gray\">Prep<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Chop<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Cook<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Plate<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">Serve<\/span>\n    <\/div>\n  <\/div>\n  <p>Each cook handles one station, no need to know the entire process. Changing the menu only requires adjusting a few stations.<\/p>\n\n  <h3>5.2 Parcel Sorting<\/h3>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item gray\">Pickup<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Scan<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Sort<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Transit<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Delivery<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">Sign<\/span>\n    <\/div>\n  <\/div>\n  <p>Each step handles its own task and passes the package to the next. Problems can be isolated and fixed independently.<\/p>\n\n  <h3>5.3 Water Treatment Plant<\/h3>\n  <div class=\"flow-box\">\n    <div class=\"flow-row\">\n      <span class=\"flow-item gray\">Intake<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Sediment<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Filter<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item gray\">Disinfect<\/span><span class=\"flow-arrow\">\u2192<\/span>\n      <span class=\"flow-item ok\">Deliver<\/span>\n    <\/div>\n  <\/div>\n  <p>Each tank handles one treatment. To improve water quality, simply add a filter tank without rebuilding the entire plant.<\/p>\n<\/div>\n\n<!-- 6 -->\n<div class=\"card\">\n  <h2>6. Pros and Cons<\/h2>\n\n  <div class=\"compare-grid\">\n    <div class=\"compare-box\">\n      <div class=\"box-title\" style=\"color:#059669\">Pros<\/div>\n      <ul style=\"font-size:.9rem\">\n        <li>Clear structure, transparent flow<\/li>\n        <li>Independent steps, easy to debug<\/li>\n        <li>Reusable and shareable<\/li>\n        <li>Easy to parallelize and optimize<\/li>\n        <li>Quick onboarding (read names, know flow)<\/li>\n        <li>Fast error localization (check failing step)<\/li>\n      <\/ul>\n    <\/div>\n    <div class=\"compare-box\">\n      <div class=\"box-title\" style=\"color:#ef4444\">Cons<\/div>\n      <ul style=\"font-size:.9rem\">\n        <li>Not suitable for scenarios with circular dependencies<\/li>\n        <li>Data passing adds overhead<\/li>\n        <li>Inter-step format contracts must be strictly maintained<\/li>\n        <li>May be &#8220;over-engineering&#8221; for simple tasks<\/li>\n        <li>Global optimization is more complex than monolith<\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n\n  <div class=\"callout tip\">\n    <strong>When to Use<\/strong>\n    Use pipelines when the process exceeds 3 independent steps, or when multiple people collaborate and steps change frequently. For a simple two-step conversion, a function is sufficient \u2014 don&#8217;t force pipeline design.\n  <\/div>\n<\/div>\n\n<div class=\"summary-box\">\n  <h2>Key Takeaways<\/h2>\n  <div class=\"s-row\"><div class=\"s-label\">Definition<\/div><div class=\"s-desc\">Pipeline = breaking complex tasks into ordered steps, where each step&#8217;s output becomes the next step&#8217;s input<\/div><\/div>\n  <div class=\"s-row\"><div class=\"s-label\">Purpose<\/div><div class=\"s-desc\">Decouple complex flows to improve readability, maintainability, reusability, and debuggability<\/div><\/div>\n  <div class=\"s-row\"><div class=\"s-label\">Core Traits<\/div><div class=\"s-desc\">Ordered, chained, independent, pluggable \u2014 like LEGO blocks that freely combine<\/div><\/div>\n  <div class=\"s-row\"><div class=\"s-label\">Common Fields<\/div><div class=\"s-desc\">CI\/CD deployment, ETL data processing, Linux pipes, GPU graphics, ML training workflows<\/div><\/div>\n  <div class=\"s-row\"><div class=\"s-label\">When to Use<\/div><div class=\"s-desc\">More than 3 independent steps, multi-person collaboration, or steps that change frequently<\/div><\/div>\n<\/div>\n\n<\/div><!-- \/lang-en -->\n\n<footer>\n  <p>Based on software engineering best practices and pipeline design patterns<\/p>\n<\/footer>\n\n<\/div>\n\n<script>\nfunction setLang(lang) {\n  document.querySelectorAll('.lang-section').forEach(el => el.classList.remove('active'));\n  document.getElementById('lang-' + lang).classList.add('active');\n  document.querySelectorAll('.lang-switch button').forEach(btn => btn.classList.remove('active'));\n  document.getElementById('btn-' + lang).classList.add('active');\n  document.documentElement.lang = lang === 'zh' ? 'zh-CN' : 'en';\n}\nfunction toggleTheme() {\n  var html = document.documentElement;\n  if (html.hasAttribute('data-theme')) {\n    html.removeAttribute('data-theme');\n    localStorage.removeItem('theme');\n  } else {\n    html.setAttribute('data-theme', 'dark');\n    localStorage.setItem('theme', 'dark');\n  }\n}\nif (localStorage.getItem('theme') === 'dark') {\n  document.documentElement.setAttribute('data-theme', 'dark');\n}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>\u4e86\u89e3\u7ba1\u7ebf Pipeline Pipeline Guide \u4e2d\u6587 English \u263c Pipeline \u79d1\u666e \u7ba1 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,9],"tags":[],"class_list":["post-310","post","type-post","status-publish","format-standard","hentry","category-cad","category-ai"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts\/310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=310"}],"version-history":[{"count":1,"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts\/310\/revisions"}],"predecessor-version":[{"id":311,"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts\/310\/revisions\/311"}],"wp:attachment":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}