AI ขั้นสูงพร้อม Gemma 4 และ AlloyDB Omni สำหรับอุตสาหกรรมที่มีการควบคุม

1. ภาพรวม

ในโลกที่มีความเสี่ยงสูงของอุตสาหกรรมที่มีการควบคุมและมีความสำคัญต่อภารกิจ องค์กรต่างๆ ต้องเผชิญกับความขัดแย้งครั้งใหญ่ นั่นคือ คุณจะนำ AI ที่ล้ำสมัยมาใช้เพื่อเพิ่มประสิทธิภาพการผลิตได้อย่างไร ในเมื่อนโยบายการรักษาความปลอดภัยทางไซเบอร์กำหนดว่าข้อมูลของคุณต้องไม่เข้าถึงอินเทอร์เน็ตสาธารณะ อินทราเน็ตและอินเทอร์เน็ตสาธารณะจะแยกออกจากกันอย่างชัดเจนและไม่มีการเชื่อมต่อกัน แม้ว่าการผลิตสมัยใหม่จะต้องการ AI แบบคาดการณ์อย่างมากเพื่อป้องกันความล้มเหลวของอุปกรณ์ที่ร้ายแรงและเพิ่มประสิทธิภาพผลผลิต แต่การส่งบันทึกการตรวจวัดระยะไกลที่มีความละเอียดอ่อน สูตรโลหะผสมที่จดสิทธิบัตร หรือข้อมูล ERP ไปยัง Cloud API สาธารณะนั้นเป็นสิ่งที่ไม่ควรทำ ดังนั้น หากข้อมูลไม่สามารถส่งไปยังระบบคลาวด์ได้ ระบบคลาวด์ก็ต้องมาหาข้อมูลแทน

ใน Codelab นี้ เราจะนำเครื่องมือ AI และข้อมูลที่ล้ำสมัยที่สุดของ Google Cloud มาใช้ในสภาพแวดล้อมที่ไม่มีการเชื่อมต่อและมีความปลอดภัยสูงโดยตรงด้วย Gemma 4 และ AlloyDB Omni

AlloyDB Omni: ตู้เซฟข้อมูลที่ดีที่สุด

ให้คิดว่า AlloyDB Omni เป็นห้องนิรภัยประสิทธิภาพสูง ซึ่งเป็นฐานข้อมูลระดับองค์กรที่อยู่ในคอนเทนเนอร์ซึ่งคุณดาวน์โหลดและเรียกใช้บนอินทราเน็ตที่ปลอดภัยของคุณเองทั้งหมด

  • การผสานรวมที่ราบรื่น: เชื่อมต่อกับเซ็นเซอร์การผลิต (เช่น VIM หรือเครื่องอัดแรงดันสูง) และ ERP ในพื้นที่ (เช่น Oracle R12) โดยตรง
  • พื้นที่เก็บข้อมูลที่พร้อมใช้งาน AI: จัดเก็บเอกสารกระบวนการที่เป็นความลับสุดยอดอย่างปลอดภัยโดยใช้การฝังเวกเตอร์สำหรับการค้นหาด้วย AI (pgvector)
  • ประสิทธิภาพ: มีประสิทธิภาพเหนือกว่า PostgreSQL มาตรฐานอย่างมากทั้งสำหรับภาระงานด้านธุรกรรมจำนวนมากและการประมวลผลด้วย AI เชิงวิเคราะห์

ผู้เชี่ยวชาญ AI ในพื้นที่: Gemma, TimesFM, TabFM

คุณสามารถดาวน์โหลดโมเดล Open-Weights และเรียกใช้โมเดลดังกล่าวในฮาร์ดแวร์ในเครื่องได้โดยตรงโดยไม่มีการรั่วไหลของ API แทนการใช้ API ระยะไกล

  • Gemma: LLM แบบโอเพนเวตของ Google ทำหน้าที่เป็นผู้เชี่ยวชาญด้านการวิจัยและพัฒนา โดยสามารถอ่านบันทึกย้อนหลังหรือวิเคราะห์สูตรโลหะผสมที่ซับซ้อนและได้รับการจดสิทธิบัตรได้อย่างปลอดภัยเพื่อคาดการณ์คุณสมบัติทางกล
  • TimesFM (The Numerical Forecaster): เนื่องจากบางครั้ง LLM อาจสร้างตัวเลขที่ผิดพลาด เครื่องจักรขนาดใหญ่จึงต้องใช้โมเดลพื้นฐานอนุกรมเวลาโดยเฉพาะ TimesFM คาดการณ์แนวโน้มตัวเลขในระยะยาวได้อย่างแม่นยำ (สูงสุด 16,000 จุดข้อมูล) โดยอ่านบันทึกการสั่นสะเทือนและอุณหภูมิเพื่อคาดการณ์เส้นโค้งความล้มเหลวของอุปกรณ์ได้อย่างแม่นยำแบบออฟไลน์ทั้งหมด
  • TabFM (The Tabular Reasoner): แม้ว่า LLM จะจัดการข้อความและ TimesFM จะจัดการแนวโน้มเชิงตัวเลข แต่ TabFM มีความเชี่ยวชาญในการให้เหตุผลเกี่ยวกับข้อมูลตารางที่มีโครงสร้าง คุณสามารถเรียกใช้โมเดลนี้ในองค์กรได้อย่างปลอดภัยเพื่อทำการวิเคราะห์ที่ซับซ้อนและตอบคำถามโดยตรงจากข้อมูล ERP หรือ CRM แบบหลายคอลัมน์ที่หนาแน่น โดยไม่จำเป็นต้องเขียนการรวม SQL ที่ซับซ้อน

กรณีการใช้งาน

การบำรุงรักษาเชิงคาดการณ์สำหรับเครื่องอัดขึ้นรูปขนาด 1,500 ตัน:

ช่วงเวลาที่ระบบหยุดทำงานโดยไม่ได้วางแผนไว้ในเครื่องจักรขนาดใหญ่นี้จะทำให้การผลิตหยุดชะงัก ซึ่งทำให้เสียเวลาและวัสดุสำคัญไปอย่างมาก ในทางกลับกัน การบำรุงรักษาตามกำหนดเวลามักจะเปลี่ยนชิ้นส่วนที่มีราคาแพงเร็วเกินไป ทำให้เสียงบประมาณโดยเปล่าประโยชน์ เราต้องเปลี่ยนจากการบำรุงรักษาเชิงรับเป็นการบำรุงรักษาเชิงคาดการณ์โดยไม่ทำลาย Air Gap

b00c0159d3e6724.png

สิ่งที่คุณจะได้เรียนรู้

ใน Codelab นี้

  1. คุณจะใช้ AlloyDB Omni เพื่อบันทึกข้อมูลเซ็นเซอร์การสั่นสะเทือนและเซ็นเซอร์อุณหภูมิในเครื่องอย่างปลอดภัย โดยสามารถเพิ่มพารามิเตอร์อื่นๆ เพื่อให้สมจริงและเป็นประโยชน์มากขึ้น
  2. คุณจะได้เรียนรู้วิธีใช้ Gemma เพื่อวิเคราะห์แนวโน้มเทียบกับบันทึกความล้มเหลวที่ผ่านมา
  3. คุณจะสร้างระบบที่คาดการณ์ความล้มเหลวและจำลองการทริกเกอร์ใบสั่งงานการจัดการสินทรัพย์ใน ERP โดยอัตโนมัติ

เราใช้ Docker เพื่อจัดสรรทั้ง LLM ในเครื่องและ AlloyDB Omni ข้อดีของแนวทางนี้คือความเรียบง่าย โดย AlloyDB Omni สามารถจัดการกระบวนการ ML-Agent ภายในของตนเองได้โดยอัตโนมัติ

ข้อกำหนด

  • มีความคุ้นเคยกับ SQL ขั้นพื้นฐาน
  • Linux VM มาตรฐาน (เช่น Ubuntu 22.04) หรือเครื่องภายใน (macOS/Windows) ที่ติดตั้ง Docker

2. เริ่ม LLM ในเครื่อง (Gemma 4)

เราจะใช้ Ollama เพื่อโฮสต์ Gemma ในเครื่อง สร้าง Dockerfile เพื่อกำหนดค่าอินสแตนซ์ Ollama ดังนี้

  1. จากเครื่องของคุณ ให้เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัลทีละคำสั่ง
mkdir -p gemma4-ollama && cd gemma4-ollama
cat << 'EOF' > Dockerfile
FROM ollama/ollama:latest
ENV OLLAMA_HOST=0.0.0.0:8080
ENV OLLAMA_MODELS=/root/.ollama
ENV MODEL=gemma4:e2b
RUN ollama serve & sleep 5 && ollama pull $MODEL
ENTRYPOINT ["ollama", "serve"]
EOF
  1. สร้างและเรียกใช้คอนเทนเนอร์ในเครือข่ายโฮสต์โดยทำดังนี้
docker build -t gemma4-local .

docker run --network host -d -p 8080:8080 --name gemma4-ollama-instance gemma4-local
  1. คุณทดสอบได้โดยใช้คำสั่งต่อไปนี้
curl -X POST http://localhost:8080/api/generate -d '{
  "model": "gemma4:e2b",
  "prompt": "Hello! Explain Gemma 4 in a few sentences."
}'

3. ติดตั้งและเริ่ม AlloyDB Omni

ถัดไป ให้สร้างคอนเทนเนอร์ฐานข้อมูล AlloyDB Omni ในเครือข่ายโฮสต์ด้วย

docker run -d \
  --name my-omni \
  --network host \
  -e POSTGRES_PASSWORD=omni \
  gcr.io/alloydb-omni/alloydbomni:18

หากไม่พบอิมเมจ AlloyDB Omni จากโปรเจ็กต์ที่อยู่ในระบบคลาวด์ Google Cloud ให้ลองตรวจสอบสิทธิ์โดยเรียกใช้คำสั่งก่อนที่จะเรียกใช้คำสั่ง docker run ด้านบน

gcloud auth login

เมื่อการตรวจสอบสิทธิ์เสร็จสมบูรณ์แล้ว ให้ลองเรียกใช้คำสั่ง docker run อีกครั้ง

4. เปิดใช้ ML-Agent ภายใน

โดยค่าเริ่มต้น ฟีเจอร์การผสานรวม ML ของ AlloyDB Omni จะปิดอยู่ เราต้องแก้ไขไฟล์ postgresql.conf ภายในคอนเทนเนอร์เพื่อเปิดใช้กระบวนการ ML-Agent ภายในและเครื่องมือค้นหา AI

เรียกใช้คำสั่งเดียวนี้เพื่อเพิ่มแฟล็กที่จำเป็น

docker exec -it my-omni sh -c "cat << EOF >> /var/lib/postgresql/data/postgresql.conf
omni_enable_ml_agent_process = 'on'
google_ml_integration.enable_model_support = 'on'
google_ml_integration.enable_ai_query_engine = 'on'
EOF"

รีสตาร์ทคอนเทนเนอร์เพื่อใช้การเปลี่ยนแปลง โดยทำดังนี้

docker restart my-omni

คุณเริ่มทดสอบการค้นหาได้โดยเริ่ม psql โดยใช้คำสั่งต่อไปนี้

docker exec -it my-omni psql -U postgres

5. กำหนดเส้นทาง AI ไปยัง LLM ในเครื่อง

เมื่อเชื่อมต่อกับฐานข้อมูลผ่าน psql (docker exec -it my-omni psql -U postgres) แล้ว คุณจะลงทะเบียนโมเดลในเครื่องแบบออฟกริดได้ แทนที่จะเรียกใช้ผ่านอินเทอร์เน็ต ให้กำหนดเส้นทาง model_request_url ไปยังเซิร์ฟเวอร์ Ollama ในเครื่องที่ทำงานบนพอร์ต 8080

เรียกใช้คำสั่ง SQL ต่อไปนี้จากพรอมต์ psql ในเทอร์มินัล

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;

CALL google_ml.create_model(
    model_id => 'gemma4:e2b',
    model_request_url => 'http://localhost:8080/api/generate',
    model_provider => 'custom',
    model_type => 'generic'
);

ตอนนี้คุณสามารถเรียกใช้การคาดคะเนได้อย่างปลอดภัยจากภายใน SQL โดยทำดังนี้

SELECT google_ml.predict_row(
    'gemma4:e2b',
    '{"model": "gemma4:e2b", "prompt": "Why is the sky blue?", "stream": false}'
)->'response';

เอาต์พุต:

4873acf20ded9dd1.png

เมื่อเราได้ทดสอบกับกรอบการทดสอบทั่วไปแล้ว มานำข้อมูลกรณีการใช้งานมาพิจารณากัน

6. สร้างสคีมาและนำเข้าข้อมูล

ตอนนี้เรามาต่อยอดกรณีการใช้งานด้วยการสร้างสคีมาและข้อมูลที่จำเป็นสำหรับการสาธิตกัน

เรียกใช้คำสั่ง SQL ต่อไปนี้จากพรอมต์ psql ในเทอร์มินัล

-- ==============================================================================
-- 1. Setup the Schema for the 1500T Forging Press
-- ==============================================================================
CREATE TABLE IF NOT EXISTS forging_press_logs (
    log_id SERIAL PRIMARY KEY,
    timestamp TIMESTAMP NOT NULL DEFAULT NOW(),
    cycle_id VARCHAR(50) NOT NULL,
    hyd_pressure_bar NUMERIC(5,2),
    oil_temp_c NUMERIC(5,2),
    vib_z_rms NUMERIC(5,2)
);

-- Clean up any existing data if running multiple times
TRUNCATE TABLE forging_press_logs;

-- ==============================================================================
-- 2. Generate 1,000 Records of Simulated Data
-- ==============================================================================
-- 99% of data is 'Normal'
INSERT INTO forging_press_logs (cycle_id, hyd_pressure_bar, oil_temp_c, vib_z_rms)
SELECT
    'C-' || LPAD(i::text, 5, '0'),
    280.0 + (random() * 10 - 5), -- Pressure around 280
    42.0 + (random() * 5),       -- Temp around 42-47
    1.8 + (random() * 0.5)       -- Vib Z around 1.8-2.3
FROM generate_series(1, 990) AS i;

-- 1% of data is 'Anomalous' (Hydraulic pressure drop & vibration spike)
INSERT INTO forging_press_logs (cycle_id, hyd_pressure_bar, oil_temp_c, vib_z_rms)
SELECT
    'C-' || LPAD((990 + i)::text, 5, '0'),
    250.0 + (random() * 5),      -- Pressure dropping
    55.0 + (random() * 5),       -- Temp rising
    5.0 + (random() * 1.5)       -- High vibration
FROM generate_series(1, 10) AS i;

-- ==============================================================================
-- 3. Run the AI Prediction via AlloyDB Omni
-- ==============================================================================
-- Ensure the model is registered (assuming 'gemma4:e2b' is running locally on port 8080)
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;

DO $$ 
BEGIN
    CALL google_ml.create_model(
        model_id => 'gemma4:e2b',
        model_request_url => 'http://localhost:8080/api/generate',
        model_provider => 'custom',
        model_type => 'generic'
    );
EXCEPTION WHEN OTHERS THEN 
    -- Ignore error if model already exists
END $$;

-- Query the most recent 5 potentially anomalous records and ask Gemma for an analysis
SELECT 
    cycle_id,
    hyd_pressure_bar,
    vib_z_rms,
    google_ml.predict_row(
        model_id => 'gemma4:e2b',
        request_body => json_build_object(
            'model', 'gemma4:e2b',
            'stream', false,
            'prompt', 'You are an industrial engineer. Analyze this sensor data from a 1500T forging press: Pressure=' || hyd_pressure_bar || ' bar, Vibration=' || vib_z_rms || ' mm/s. Normal pressure is ~280 bar and normal vibration is ~2.0 mm/s. Does this indicate a hydraulic failure? Answer in one short sentence.'
        )
    )->>'response' AS ai_analysis
FROM 
    forging_press_logs
WHERE 
    hyd_pressure_bar < 260 OR vib_z_rms > 4.5
ORDER BY 
    timestamp DESC
LIMIT 5;

การเรียกใช้คำสั่งข้างต้นทีละรายการควรให้ผลลัพธ์ดังนี้

e8fabd49e72c225e.png

เมื่อข้อมูลพร้อมแล้ว เรามาสร้างแดชบอร์ดการบำรุงรักษาเชิงคาดการณ์กัน

7. การสร้างแดชบอร์ดไลฟ์สด

หากต้องการเห็นภาพสถาปัตยกรรมนี้อย่างแท้จริง คุณสามารถเชื่อมต่อสถาปัตยกรรมนี้กับแดชบอร์ด Python Flask ซึ่งเป็นเว็บแอปพลิเคชันได้อย่างง่ายดาย

แบ็กเอนด์ Flask ที่มีขนาดเล็กจะสตรีมการตรวจวัดระยะไกลของเซ็นเซอร์แบบเรียลไทม์ไปยังแดชบอร์ด HTML แทนที่จะเรียกใช้การค้นหา SQL ด้วยตนเอง ในระหว่างการทำงานปกติ แดชบอร์ดจะแสดงกราฟเท่านั้น

แต่เมื่อแบ็กเอนด์ตรวจพบความผิดปกติ (เช่น แรงดันลดลง) โค้ด Python จะเรียกใช้ฟังก์ชัน google_ml.predict_row() ภายใน AlloyDB ทันที AlloyDB จะส่งต่อบริบทไปยังโมเดล Gemma ในเครื่องอย่างราบรื่น และข้อมูลวิเคราะห์เชิงลึกของ AI จะปรากฏบนแดชบอร์ดแบบเรียลไทม์

💡 เคล็ดลับสำหรับ Codelab: หากต้องการออกจากคอนเทนเนอร์ฐานข้อมูลและกลับไปที่บรรทัดคำสั่งของโฮสต์ ให้พิมพ์ \q แล้วกด Enter (หรือเปิดแท็บเทอร์มินัลใหม่) จากนั้นให้เรียกใช้คำสั่งแอปพลิเคชัน Flask ด้านล่าง

หากต้องการทำสิ่งต่อไปนี้

  1. ไปที่สภาพแวดล้อมในการพัฒนาซอฟต์แวร์ / ตัวแก้ไขโค้ด แล้วเปิดเทอร์มินัล
  2. เรียกใช้คำสั่งต่อไปนี้
pip install flask psycopg2-binary
  1. โคลนที่เก็บโค้ดในไดเรกทอรีโปรเจ็กต์โดยเรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล Cloud Shell
git clone https://github.com/AbiramiSukumaran/gemma4-alloydb-omni-demo
  1. ไปที่โฟลเดอร์โปรเจ็กต์
cd gemma4-alloydb-omni-demo
  1. เรียกใช้แอปพลิเคชัน
python3 app.py

เปิดเว็บเบราว์เซอร์หรือคลิกลิงก์ไปยังแอปที่ทำงานใน Localhost

db2249f5d7f87d4c.png

ข้อมูลที่แสดงในแดชบอร์ดไลฟ์สด

แอปพลิเคชัน Flask ทำหน้าที่เป็นแดชบอร์ดการตรวจสอบแบบเรียลไทม์สำหรับเครื่องอัดขึ้นรูปขนาด 1,500 ตัน โดยแสดงภาพวิธีที่ระบบที่แยกออกจากเครือข่ายและออฟไลน์โดยสมบูรณ์จัดการกับการบำรุงรักษาเชิงคาดการณ์ ดังนี้

  • สตรีมการตรวจวัดระยะไกลอย่างต่อเนื่อง: แดชบอร์ดจะแสดงบันทึกการสั่นสะเทือน (มม./วินาที) และแรงดันไฮดรอลิก (บาร์) แบบเรียลไทม์ โดยอัปเดตแบบไดนามิกเพื่อจำลองการทำงานในโรงงานที่กำลังดำเนินอยู่
  • ความผิดปกติของฐานข้อมูลแบบเรียลไทม์: เมื่อเซ็นเซอร์ลดลงต่ำกว่าเกณฑ์ (เช่น แรงดันลดลงต่ำกว่า 260 บาร์) แบ็กเอนด์ Python จะแจ้งเหตุการณ์และเรียกใช้ฟังก์ชัน google_ml.predict_row() ภายใน AlloyDB Omni ทันที
  • การวินิจฉัย AI ที่แปลเป็นภาษาท้องถิ่น: AlloyDB Omni จะส่งต่อบริบทแบบเรียลไทม์ไปยังโมเดล Gemma 4 ในเครื่องของคุณ Gemma ทำหน้าที่เป็นผู้เชี่ยวชาญด้านอุตสาหกรรมในองค์กร โดยวิเคราะห์ข้อมูลการตรวจวัดและพิมพ์การแจ้งเตือนจากการวินิจฉัย (เช่น "คำเตือน: ความดันลดลงและการสั่นสะเทือนสูงบ่งชี้ว่าซีลไฮดรอลิกอาจทำงานล้มเหลว") บนแดชบอร์ดโดยตรง
  • ไม่มีการรั่วไหล: การประมวลผล ฐานข้อมูล กราฟ และการให้เหตุผลของ AI ทั้งหมดจะดำเนินการบนโฮสต์ในเครื่องของคุณโดยสมบูรณ์ โดยไม่จำเป็นต้องเชื่อมต่ออินเทอร์เน็ต

8. เส้นทางสู่เวอร์ชันที่ใช้งานจริง

หากต้องการปรับขนาดสถาปัตยกรรมนี้จากต้นแบบในเครื่องไปเป็นการติดตั้งใช้งานในโรงงานระดับที่ใช้งานจริงโดยไม่ลดทอนความปลอดภัยแบบ Air-gapped คุณสามารถเลือกจากเส้นทางการติดตั้งในองค์กรแบบมาตรฐาน 2 เส้นทางต่อไปนี้

VM เวอร์ชันที่ใช้งานจริงและ Bare-Metal (ไม่มีคอนเทนเนอร์):

สำหรับสภาพแวดล้อมที่ไม่ต้องการใช้คอนเทนเนอร์หรือนโยบายความปลอดภัยกำหนดให้ต้องผสานรวมกับระบบปฏิบัติการโฮสต์อย่างลึกซึ้ง คุณสามารถติดตั้งใช้งานโดยใช้แพ็กเกจ RPM ของ AlloyDB Omni อย่างเป็นทางการ การติดตั้งใช้งานนี้จะช่วยให้คุณได้รับประสิทธิภาพที่มีเวลาในการตอบสนองต่ำ การปฏิบัติตามข้อกำหนดของ SELinux และความพร้อมใช้งานสูง (HA) แบบอัตโนมัติไปยัง RHEL หรือ Rocky Linux VM ในเครื่องโดยตรงแบบออฟไลน์ทั้งหมด โดยมี AlloyDB Omni Red Hat RPM Orchestrator เป็นตัวช่วย

Production Kubernetes & HA:

หากโครงสร้างพื้นฐานของโรงงานใช้การจัดการภายใน คุณสามารถติดตั้งใช้งาน AlloyDB Omni ใน Kubernetes ได้ เมื่อใช้ AlloyDB Omni Kubernetes Operator อย่างเป็นทางการ คุณจะสามารถทำให้คลัสเตอร์ฐานข้อมูลที่มีประสิทธิภาพใช้งานได้ในรูปแบบที่ประกาศไว้ พร้อมด้วยแบบจำลองสแตนด์บายแบบซิงโครนัส การสำรองข้อมูลในเครื่องแบบอัตโนมัติ และปลายทางแบบอ่านอย่างเดียวโดยเฉพาะ

9. ยินดีด้วย

สำหรับอุตสาหกรรมการผลิตด้านการป้องกันและอุตสาหกรรมที่แยกออกจากเครือข่ายภายนอก (Air-gapped) เช่นนี้ ตัวเลือกไม่ได้จำกัดอยู่แค่ระหว่างการรักษาความปลอดภัยที่เข้มงวดกับนวัตกรรมทางเทคโนโลยีอีกต่อไป การติดตั้งใช้งานฐานข้อมูลที่ใช้คอนเทนเนอร์ โมเดลพร็อกซีเฉพาะทาง และ AI แบบโอเพนเวตบนฮาร์ดแวร์ที่มีอธิปไตยจะช่วยให้คุณเปลี่ยนโรงงานให้กลายเป็นศูนย์กลางการคาดการณ์อัจฉริยะได้ โดยที่ยังคงรักษาความปลอดภัยทางดิจิทัลไว้ได้อย่างสมบูรณ์