Fred는 웹 사이트의 두 인스턴스를 비교하는 데 사용되는 OpenSource 시각 회귀 도구입니다. FRED는 현재 (기준선)와 웹 사이트의 업데이트 된 버전을 비교하여 기능을 중단하지 않도록 자동 시각적 회귀 테스트를 담당합니다. Fred는 다음을 비교합니다.
시각적 분석은 기준선 및 업데이트 된 사이트의 스크린 샷에 대한 정규화 된 평균 제곱 오차와 구조적 유사성 인덱스를 계산하는 반면, 시각적 AI는 이미지 세분화 기계 학습 기술을 적용하여 높은 수준의 텍스트 및 이미지 시각적 구조를 인식하여 레이아웃 및 컨텐츠를 독립적으로 살펴 봅니다. 이로 인해 동적 컨텐츠의 영향이 오 탐지를 생성합니다.
필요한 경우 Fred를 사용하십시오.
프레드는 확장 가능하도록 설계되었습니다. 내부 대기열이 있으며 사용 가능한 RAM 및 CPU (또는 GPU)의 양에 따라 웹 사이트를 동시에 처리 할 수 있습니다.
_fred-v1 에서 사용할 수 있습니다. v2.x (현재 버전)에는 ML 모델을 훈련/재교육하는 코드가 포함되어 있지 않습니다. 그렇게 해야하는 경우 V1 폴더의 원본 코드를 확인하십시오. 모델은 동일하므로 사용자 정의 교육 모델을 만들면 V2에 연결하면 작동합니다. Fred를 Docker 또는 지역 프로세스로 시작할 수 있습니다.
소프트웨어를 복제하고 실행하려면 Dockerfile을 제공했습니다. 그것을 실행하려면 :
git clone https://github.com/adobe/frontend-regression-validator.git
cd frontend-regression-validator/docker
docker build --no-cache -t fred .
docker run -p 5000:5000 -m 8g --memory-reservation=8g --oom-kill-disable=True --memory-swap 8G fred 메모리가 아닌 오류가 여전히 발생하는 경우 UI Docker 앱에서 더 많은 메모리를 할당하십시오. 도구 모음에서 Docker 아이콘을 클릭하고 Preferences Advanced 이동 한 다음 특히 ML (선택 사항)을 사용하려는 경우 슬라이더를 8GB 이상으로 당깁니다. Dockerfile을 사용하는 대신 로컬로 실행하거나 Docker에 할당 된 메모리를 at least 8GB, prefferably 16GB 로 늘리는 것이 좋습니다.
chromedriver 설치했는지 확인하십시오. 없으면 Mac에 다음과 같이 설치하십시오.
brew tap homebrew/cask && brew cask install chromedriver
또는 Linux에서 :
sudo apt-get install chromium-chromedriver
그런 다음 다음을 실행하십시오.
git clone https://github.com/adobe/frontend-regression-validator.git
cd frontend-regression-validator
pip install -r requirements.txt
cd fred/ml
cat model_files.bz2.parta* > model_files.bz2
tar xjf model_files.bz2
cd ..
python3 run.py
이렇게하면 요청에 대한 답변 및 웹 사용자 인터페이스를 제공하는 플라스크 인스턴스가 시작됩니다. QuickNote : 사용 --port 청취 포트를 지정하려면 기본적으로 5000 리스팅합니다. Fred의 시작 매개 변수에 대한 자세한 내용은 여기를 참조하십시오.
Fred와의 상호 작용은 웹 UI 또는 API 통화에 의해 수행됩니다. UI를 사용하면 사용자가 API 엔드 포인트로 통화를 보내고 결과를 볼 수 있습니다.
웹 인터페이스를 열려면 http://0.0.0.0:5000/static/submit.html 5000/static/submit.html로 이동하십시오 (이에 따라 포트 조정). 필요한 모든 필드를 채우고 작업을 실행하고 완료 될 때까지 기다리십시오. 헤더에서 Jobs 링크를 클릭하여 결과를 봅니다.
API를 사용하려면 여기에서 전용 API README를보십시오.
Fred는 웹 사이트 비교를 요청할 때까지 기다립니다 ( /api/verify 전화). 크롤링 프로세스를 시작합니다. GET /api/viewjobs 로 모든 작업을보고, 작업 ID를 매개 변수로 제공하는 /api/results 로 특정 작업의 상태를 얻을 수 있습니다.
따라서 FRED에 대한 입력은 비교할 URL 쌍입니다.
프로세스는 Fred가 URL을 크롤링하여 비교할 여러 페이지를 추출한 다음 각 페이지를 렌더링하고 스크린 샷을 찍는 것으로 시작합니다.
콘솔 및 네트워크 로그가 비교됩니다.
각 스크린 샷은 (각 지정된 해상도에 대해 기준선/업데이트 된 스크린 샷 쌍으로) 분석됩니다.
활성화 된 경우 각 스크린 샷 쌍은 ML 분석도 겪습니다
결과가 로컬로 저장됩니다 (사용자는 status Done 되거나 일부 error 설정 될 때까지 API를 통해 주기적으로 확인해야합니다.)
결과는 report 키에 여러 점수가 포함 된 JSON 객체입니다. overall_divergence 점수는 네트워크의 가중 합계, 시각적 및 AI-Verual (활성화 된 경우) 분기입니다. 0 의 점수는 완벽한 일치를 의미하며 (기준선과 업데이트의 차이는 없음) 더 높은 점수는 최대 100 강조합니다.
필요한 경우 시각적 인터페이스를 사용하여 결과를 빠르게 조사하십시오. 그렇지 않으면 report 에는 원시 이미지에 대한 링크와 자동화 된 방식으로 FRED를 사용하려는 경우 차이를 강조하는 분석 이미지가 포함되어 있습니다.
Fred는 확장 가능하도록 설계되었으므로 crawler 와 ML 두 가지 구성 요소로 논리적으로 분할됩니다. crawler 구성 요소는 사용자와 상호 작용하는 주요 진입 점입니다. ML 구성 요소는 crawler 구성 요소와 동일한 코드이지만 API 호출을 듣는 또 다른 엔드 포인트입니다. 이 분할의 논리는 GPU가 비싸고 CPU는 그렇지 않다는 것입니다. 따라서 우리는 많은 크롤러를 가질 수 있으며, 그 결과 ML 분석을 수행하기 위해 몇 가지 GPU를 활성화 한 FRED 인스턴스 ( ML 구성 요소라고 함)를 요청할 수 있습니다.
예를 들어, 매일 1000 개의 웹 사이트를 가지고있는 시나리오를 상상해보십시오. 우리는 각각 32GB RAM과 8 VCPU를 가진 10 개의 가상 머신을 만듭니다. 각 인스턴스는 100 /api/verify 통화를받습니다. --crawler_threads 5로 설정했다고 가정합니다. 즉, 5 개의 웹 사이트를 동시에 크롤링 할 수 있습니다. 또한 4 개의 GPU가있는 단일 GPU 머신 만 가지고 있으므로 FRED 인스턴스를 시작하여 ML 구성 요소를 호출합니다. 이 인스턴스에서 우리는 --ai_threads 4로 설정하여 동시에 4ml 유효성 검사를 실행합니다. 이제 crawler 구성 요소에 대한 각각의 Post API 요청에서 ml_address ml 구성 요소의 주소로 설정합니다. 이제 crawler 구성 요소가 웹 사이트 쌍을 크롤링하고 분석하기 위해 끝날 때마다 ML 구성 요소를 스크린 샷을 보내고 분석하도록 요청합니다. ml 구성 요소는이 요청을 대기열에 추가하고 GPU를 사용할 수 있으면 비교를 실행합니다. 완료되면 자동으로 원래 crawler 구성 요소의 분석에 다시보고합니다. 기본적 으로이 접근법은 사용 가능한 테스트 컴퓨터 수와 함께 성능을 선형으로 확장합니다.
Fred Runtimes는 사이트의 복잡성에 따라 크게 다릅니다. 웹 사이트를로드하는 것은 (불행히도) 결정 론적 프로세스가 아니기 때문에 대부분의 시간은 크롤러 구성 요소에 소비됩니다. 때로는 웹 사이트가 단순히 매달려 있거나 팝업이 무작위로 나타나거나 일부 외부 리소스가로드를 거부합니다. 내부적으로, 우리는 이것에 대한 유일한 치료법을 가지고 있습니다. 끔찍한 일이 발생하면 웹 사이트를 다시로드하는 일종의 try-catch . 그러나 이것은 페이지가로드 된 후 몇 초 동안 기다렸다는 사실과 함께, 반복 된 스크린 샷이 동적 컨텐츠를 발견하여 크롤링 시간을 극적으로 증가시킵니다.
크롤링 부품은 일반적으로 크롤링 된 페이지 수에 따라 2-10 분이 걸립니다.
시각적 분석 (각 스크린 샷이 최대 20 메가 픽셀로 제한됨)은 이미지 쌍 당 ~ 5-10 초가 걸립니다. 각 추가 해상도는 다른 이미지 쌍 세트를 의미합니다.
AI (ML) 시각적 분석은 GPU의 이미지 쌍 당 0-30 초가 걸립니다. ML PAR이 U-NET (스택 컨볼 루션 레이어)이므로 모든 GPU가 수행 할 수 있습니다. 항상 CPU에서 실행할 수 있지만 이미지 쌍 당 30 초 대신 이미지 쌍 당 5 분 동안 기다릴 수 있습니다.
전반적으로, ML 가능 크롤링의 경험 규칙은 끝나기 시작하며 페이지 당 1 분 이하입니다.